5

AndroidアプリケーションにGoogleドライブを実装しましたが、かなりうまく機能しますが、バックグラウンドスレッドでアップロード/ダウンロードを実行して、アクティビティを残してアプリで何か他のことを実行できる方法を見つけようとしています. 問題は、 などの例外が発生した場合にドライブがアクティビティ参照を必要とすることUserRecoverableAuthIOExceptionです。

ここで私が理解できない問題があります。以下に、try/catch コードをいくつか示します。

try {
    //...drive api stuff here
} catch (UserRecoverableAuthIOException e) {
    possibleException = e;
    try {
        e.getIntent();
    } catch ( NullPointerException e2 ) {  //this is the crazy part
        // e.getIntent() should not throw a nullpointer
        e2.printStackTrace();
        possibleException = e2;
    }
    onActivityRestartWhat = RESTART_IMPORT;
    // just a note i do handle this exception properly in another section of a code when there is an intent.
} catch (FileNotFoundException e) {
    possibleException = e;
    e.printStackTrace();
} catch (IOException e) {
    possibleException = e;
    e.printStackTrace();
}

私が理解できないのは、私がアクセスしようとしているホエイをUserRecoverableAuthIOException投げている理由です.NullPointerExceptiongetIntent

より詳しい情報

UserRecoverableAuthIOExceptionさらに認証が必要な場合はキャッチし、startActivityForResultメソッドを介してリクエストします。また、この例外は、開始したアクティビティから戻った場合、つまりアクティビティを破棄した場合にのみスローされます。基本的に、スレッドでドライブ ファイルをアップロード/ダウンロードするプロセスがあり、完了するまでアクティビティを離れないと、[戻る] ボタンでアクティビティを破棄すると、この例外が発生します。

スタックトレース

07-10 14:45:32.903: W/System.err(1450): java.lang.NullPointerException
07-10 14:45:32.913: W/System.err(1450):     at android.content.Intent.<init>      (Intent.java:3529)
07-10 14:45:32.913: W/System.err(1450):     at    com.google.android.gms.auth.UserRecoverableAuthException.getIntent(Unknown Source)
07-10 14:45:32.913: W/System.err(1450):     at com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException.getIntent(UserRecoverableAuthIOException.java:62)
07-10 14:45:32.913: W/System.err(1450):     at my.app.DriveHelper$2.run(DriveHelper.java:211)

私の欲求

バックグラウンド スレッドで (Google ドライブ経由で) ダウンロード/アップロードを実行したい。SDKには、またはstartActivityForResultへの参照を必要とする可能性のある他のメソッドが必要であるため、これが困難になりますが、これらの参照を必要とする SDK のアクセス許可がアプリに付与されると、機能するはずです。うまくいけば、これは理にかなっています。ActivityContext

4

2 に答える 2

3

以下は、例外を適切に処理するために従うことができる手順UserRecoverableAuthIOExceptionであり、バックキーを押したときにその例外を取得することを回避することもできます.

場合によっては、そのエラーを受け取っている場合は、アクティビティが破棄されていることを意味するため、アクティビティに依存するべきではありません

  • 「tasks-android-sample」に示すように、直接からではなく、から新しいcom.google.api.services.tasks.Tasksオブジェクト を作成する必要がありますContextServiceActivity

例外が発生した場合

  1. PendingIntentfromで通知を表示する必要がありますService

  2. PendingIntentActivity への参照を含める必要があります。

  3. アクティビティは追加のインテントを処理し、アカウントの選択ダイアログを表示するなどの必要なことを行う必要があります

ここでサンプル コードを実行できます(GoogleTasksService)

于 2013-08-08T14:59:05.267 に答える
0

この場合、複数のアクティビティを使用しないでください。

ビューに切り替えることで、タスクを達成できます。

于 2013-07-11T13:50:11.440 に答える