Java 使用Android驱动器SDK的UserRecoverableAuthIOException没有任何意图

Java 使用Android驱动器SDK的UserRecoverableAuthIOException没有任何意图,java,android,exception,google-drive-api,Java,Android,Exception,Google Drive Api,我已经在我的android应用程序中实现了GoogleDrive,它运行得很好,但我正在试图找到一种在后台线程中运行上传/下载的方法,这样我就可以在我的应用程序上留下一个活动并做其他事情。问题是,在异常情况下,驱动器需要活动引用,例如userrecoverableauthiotexception 这是我无法理解的问题。下面是一些try/catch代码: try { //...drive api stuff here } catch (UserRecoverableAuthIOExcept

我已经在我的android应用程序中实现了GoogleDrive,它运行得很好,但我正在试图找到一种在后台线程中运行上传/下载的方法,这样我就可以在我的应用程序上留下一个活动并做其他事情。问题是,在异常情况下,驱动器需要活动引用,例如
userrecoverableauthiotexception

这是我无法理解的问题。下面是一些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
在我试图访问
getIntent
时抛出
NullPointerException
异常

更多信息 当需要更多身份验证时,我会捕获
UserRecoverableAuthIOException
,并通过
startActivityForResult
方法请求它。此外,只有当我退出已启动的活动,即销毁该活动时,才会引发此异常。基本上,我有一个在线程中上传/下载驱动器文件的过程,如果我在完成之前不离开活动,那么它工作,如果我通过后退按钮销毁活动,那么我会得到这个异常

堆栈跟踪
07-1014:45:32.903:W/System.err(1450):java.lang.NullPointerException
07-10 14:45:32.913:W/System.err(1450):位于android.content.Intent。(Intent.java:3529)
07-10 14:45:32.913:W/System.err(1450):位于com.google.android.gms.auth.UserRecoverableAuthException.getIntent(未知来源)
07-10 14:45:32.913:W/System.err(1450):位于com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException.getIntent(UserRecoverableAuthIOException.java:62)
07-10 14:45:32.913:W/System.err(1450):在my.app.DriveHelper$2.run(DriveHelper.java:211)
我的愿望
我想在后台线程中运行下载/上传(通过google drive)。由于sdk需要
startActivityForResult
和其他可能需要引用
活动
上下文
的方法,这使得这一点变得困难,但一旦应用程序被授予需要这些引用的sdk权限,它就应该可以工作。希望这是有意义的。

你能做什么,在这种情况下,不要使用多个活动


通过切换到视图,您可以完成任务。

以下是正确处理
UserRecoverableAuthIOException
异常的步骤,甚至可以避免在按下back键时出现异常

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

  • 你需要 从创建新的
    com.google.api.services.tasks.tasks
    对象
    服务的
    上下文
    不是直接来自任何
    活动
    ,如“任务android示例”中所示
当你遇到异常

  • 您需要从
    服务

  • pendingent
    应包含对活动的引用,例如 家庭活动

  • 活动应该处理额外的意图,并且应该这样做 显示“选择帐户”对话框等所需操作


  • 您可以查看示例代码(GoogleTasksService)

    是否可以发送堆栈跟踪?@BurcuDogan我添加了堆栈跟踪。注意,我正在捕获运行
    getIntent()
    时抛出的NullPointerException。看起来这是一个合理的答案。谢谢分享!我曾想过使用一项服务,但却在想如何从中“连接”到活动,以运行
    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)