Android上のJavaイワシwebdavクライアント

マイケル

私は現在、イワシをベ​​ースにしたAndroid用のWebDAVクライアントを実装しています(https://github.com/lookfirst/sardine)。Android-Clientは、APIレベル15(min-Apiレベル)を対象としています。

今、次のようにSardineFactoryクラスを使用して接続を初期化します。

sardine = SardineFactory.begin(user, password);

このコードはアクティビティ内に埋め込まれており、認証情報が有効かどうかを確認します。アクティビティの[OK]ボタンを押すと、上記のコードラインを埋め込むAsyncTaskが開始されます

AsyncTask<ServerCredentials, Void, ServerCredentials> verifyCredentialsTask = new AsyncTask<String[], Void, boolean>(){
            @Override
            protected boolean doInBackground(String[]...c) {
                try {
                   String user = c[0];
                   String password = c[1]
                   sardine = SardineFactory.begin(user, password);
                   return true;
                }
                catch (Exception e) {
                   return false;
                }

            };

            @Override
            protected void onPostExecute(ServerCredentials sc) {
                final Intent intent = new Intent();
                ...

                setAccountAuthenticatorResult(intent.getExtras());
                setResult(RESULT_OK);
                finish();
            }
        };

Androidアプリケーションをデバッグすると、SardineFactoryから最初にイワシが初期化されるところまで到達します。この行をステップオーバーすると、ExceptionInInitializerErrorがスローされます。try catchステートメントがありますが、アクティビティ全体がクラッシュし、logcatウィンドウに次の例外トレースが表示されます。

E/AndroidRuntime(10996): FATAL EXCEPTION: AsyncTask #1
E/AndroidRuntime(10996): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(10996):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
E/AndroidRuntime(10996):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
E/AndroidRuntime(10996):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
E/AndroidRuntime(10996):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
E/AndroidRuntime(10996):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
E/AndroidRuntime(10996):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
E/AndroidRuntime(10996):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
E/AndroidRuntime(10996):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
E/AndroidRuntime(10996):    at java.lang.Thread.run(Thread.java:856)
E/AndroidRuntime(10996): Caused by: java.lang.ExceptionInInitializerError
E/AndroidRuntime(10996):    at com.github.sardine.SardineFactory.begin(SardineFactory.java:45)
E/AndroidRuntime(10996):    at com.github.sardine.SardineFactory.begin(SardineFactory.java:34)
E/AndroidRuntime(10996):    at com.github.sardine.SardineFactory.begin(SardineFactory.java:22)

私はすでに答えをウェブで検索しました。ExceptionInInitializerErrorの定義は、一般的なものです(https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/ExceptionInInitializerError.html)。

参照しているsardine.jarにソースをアタッチすると、beginメソッドとそのオーバーロードをデバッグできます。呼び出される最後の「begin」メソッドは、次のように定義されます。

public static Sardine begin(String username, String password, ProxySelector proxy)
{
    try {
        return new SardineImpl(username, password, proxy);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

問題を引き起こしているようです。

ご覧のとおり、スローされた例外をキャッチできるかどうかを確認するために、trycatchで既に変更しています。しかし、SardineImplコンストラクターをステップオーバーするとすぐに、ExceptionInInitializerErrorがスローされます。私はそれを捕まえる機会がありません。

一部のライブラリがまだ不足していると思います。Mavenビルドスクリプト(クリーンインストール)を使用して、Eclipse内でsardine.jarをビルドしています。次の不足しているライブラリを追加したことを除いて、ソースは変更されていません

ant-1.9.2.jar
commons-codec-1.6.jar
commons-logging-1.1.3.jar
httpclient-4.5.jar
httpcore-4.3.2.jar
slf4j-api-1.7.12.jar
slf4j-jdk14-1.7.12.jar

Eclipseプロジェクト設定(Javaビルドパス->順序とエクスポート)のフックは、すべての外部ライブラリに設定されています。したがって、APKがビルドされ、ターゲットデバイスにインストールされた場合、何も欠落していないと思います。

誰かが同様の問題を経験しましたか?ExceptionInInitializerError例外をどのように解釈できますか?

マイケル

この問題を解決するためだけに。webdav経由でownCloudインスタンスにアクセスしたかったので、イワシライブラリを削除して、ネイティブのownCloudライブラリ(https://github.com/owncloud/android-library)に移動することにしました。このライブラリにはかなり優れたサンプルクライアントが含まれており、私のプロジェクトに最適です。

ありがとう

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Java WebDAVクライアント側ライブラリ

分類Dev

ネットワーク経由のJavaシリアライゼーション

分類Dev

Apache httpclientLocalTestServerを使用したwebDavクライアントへの統合テスト

分類Dev

異なるネットワーク上のサーバーへのJavaソケットクライアント。

分類Dev

Java:クライアントにネットワーク上のサーバーを検出させる方法は?

分類Dev

ダイアログ上のAndroidライフサイクルイベント

分類Dev

Android Studio(ワークアウトアプリ)のインテントエラー

分類Dev

webdavクライアントpythonで暗号化されたnextcloudSSLへのアクセスの問題

分類Dev

ローカルマシン上のJavaのUDPクライアントサーバー、クライアントプログラムが応答しない

分類Dev

サイトのクライアントAndroidアプリケーション

分類Dev

HTTPリクエストがWebDavクライアントからのものかどうかを知る方法は?

分類Dev

Java 11上のSOAPクライアント

分類Dev

パーセントライブラリ上のAndroidアニメーション

分類Dev

Mac、Windows、Linux上のJavaデスクトップアプリケーションインストーラー

分類Dev

Javaクライアントライブラリを備えたGoogleドライブV3は、Android上に無題のファイルを作成します

分類Dev

JavaクライアントでのSSLハンドシェイク

分類Dev

Big Query Javaクライアントのプロキシ設定

分類Dev

クライアント側のパスワードハッシュ

分類Dev

ペアワイズサブトラクションの最適化

分類Dev

アプリケーションの保護IBMワークライト

分類Dev

プライベートネットワーク上でストアアプリを配布するためのオプション

分類Dev

1つのグラフ上のアクションイベントに対する同時アクション

分類Dev

dnsmasqを使用して、小規模なローカルネットワーク上のクライアントにルートをプッシュします

分類Dev

特定のリンクリストのペアワイズスワップ要素(Javaソリューション)

分類Dev

クライアントのマシン上のファイルにアクセスする方法

分類Dev

Wildfly:AMQ214016:nattedネットワーク上のクライアントからのnetty接続java.nio.channels.UnresolvedAddressExceptionの作成に失敗しました

分類Dev

JavaのFacebookRESTクライアント

分類Dev

Androidアプリのクラッシュ..インテントフラグ?

分類Dev

ネットワーク上のハードドライブメーカーのシリアル番号

Related 関連記事

  1. 1

    Java WebDAVクライアント側ライブラリ

  2. 2

    ネットワーク経由のJavaシリアライゼーション

  3. 3

    Apache httpclientLocalTestServerを使用したwebDavクライアントへの統合テスト

  4. 4

    異なるネットワーク上のサーバーへのJavaソケットクライアント。

  5. 5

    Java:クライアントにネットワーク上のサーバーを検出させる方法は?

  6. 6

    ダイアログ上のAndroidライフサイクルイベント

  7. 7

    Android Studio(ワークアウトアプリ)のインテントエラー

  8. 8

    webdavクライアントpythonで暗号化されたnextcloudSSLへのアクセスの問題

  9. 9

    ローカルマシン上のJavaのUDPクライアントサーバー、クライアントプログラムが応答しない

  10. 10

    サイトのクライアントAndroidアプリケーション

  11. 11

    HTTPリクエストがWebDavクライアントからのものかどうかを知る方法は?

  12. 12

    Java 11上のSOAPクライアント

  13. 13

    パーセントライブラリ上のAndroidアニメーション

  14. 14

    Mac、Windows、Linux上のJavaデスクトップアプリケーションインストーラー

  15. 15

    Javaクライアントライブラリを備えたGoogleドライブV3は、Android上に無題のファイルを作成します

  16. 16

    JavaクライアントでのSSLハンドシェイク

  17. 17

    Big Query Javaクライアントのプロキシ設定

  18. 18

    クライアント側のパスワードハッシュ

  19. 19

    ペアワイズサブトラクションの最適化

  20. 20

    アプリケーションの保護IBMワークライト

  21. 21

    プライベートネットワーク上でストアアプリを配布するためのオプション

  22. 22

    1つのグラフ上のアクションイベントに対する同時アクション

  23. 23

    dnsmasqを使用して、小規模なローカルネットワーク上のクライアントにルートをプッシュします

  24. 24

    特定のリンクリストのペアワイズスワップ要素(Javaソリューション)

  25. 25

    クライアントのマシン上のファイルにアクセスする方法

  26. 26

    Wildfly:AMQ214016:nattedネットワーク上のクライアントからのnetty接続java.nio.channels.UnresolvedAddressExceptionの作成に失敗しました

  27. 27

    JavaのFacebookRESTクライアント

  28. 28

    Androidアプリのクラッシュ..インテントフラグ?

  29. 29

    ネットワーク上のハードドライブメーカーのシリアル番号

ホットタグ

アーカイブ