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
投げている理由です.NullPointerException
getIntent
より詳しい情報
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 のアクセス許可がアプリに付与されると、機能するはずです。うまくいけば、これは理にかなっています。Activity
Context