Java 使用Android驱动器SDK的UserRecoverableAuthIOException没有任何意图
我已经在我的android应用程序中实现了GoogleDrive,它运行得很好,但我正在试图找到一种在后台线程中运行上传/下载的方法,这样我就可以在我的应用程序上留下一个活动并做其他事情。问题是,在异常情况下,驱动器需要活动引用,例如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
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)