使用适用于Android的Drive SDK没有来自UserRecoverableAuthIOException的意图

Pza*_*nno 5 java android exception google-drive-api

我已经在我的Android应用程序中实现了谷歌驱动器,它工作得很好,但我想找到一种方法在后台线程中运行上传/下载,这样我就可以在我的应用程序上留下一个活动并做一些其他事情.问题是,驱动器在异常情况下需要活动参考,例如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();
}
Run Code Online (Sandbox Code Playgroud)

我想不通的是,为什么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)
Run Code Online (Sandbox Code Playgroud)

我的愿望

我想在后台线程中运行下载/上传(通过谷歌驱动器).由于sdk需要startActivityForResult和其他方法可能需要引用ActivityContext使其变得困难,但是一旦应用程序被授予了需要这些引用的sdk权限,它就应该工作.希望这是有道理的.

Bal*_*aji 3

以下是您可以按照正确处理异常的步骤UserRecoverableAuthIOException,甚至可以避免在按下后退时出现该异常。

在某些情况下,如果您收到该错误,则意味着该活动已被破坏,因此您不应依赖该活动

  • 您需要com.google.api.services.tasks.TasksContextService不是直接从任何对象创建新对象Activity,如“tasks-android-sample”中所示

当你遇到异常时

  1. PendingIntent您需要显示来自以下内容的通知Service

  2. PendingIntent应该包含对 Activity 的引用,例如 HomeActivity

  3. 活动应该处理额外的意图,并且应该执行所需的操作,例如显示选择帐户对话框

您可以在此处查看示例代码(GoogleTasksService)