Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调用AccountManager.getAuthToken().getResult()会导致执行跳到函数末尾_Android - Fatal编程技术网

Android 调用AccountManager.getAuthToken().getResult()会导致执行跳到函数末尾

Android 调用AccountManager.getAuthToken().getResult()会导致执行跳到函数末尾,android,Android,我的应用程序使用AccountManager.getAuthToken().getResult()为Google Voice获取authToken(我知道它是同步和阻塞的。我没有写这部分)。通常,Google Play Services会在第一时间显示通知,通知用户需要授权应用程序访问其帐户,然后缓存令牌 一个用户报告说他从未收到通知,结果调用getResult()使应用程序崩溃。在进行了一些调试、挖掘日志并编写了一个测试应用程序之后,我们缩小了原因,因为用户不想收到关于OTA的通知,所以阻止了

我的应用程序使用
AccountManager.getAuthToken().getResult()
为Google Voice获取authToken(我知道它是同步和阻塞的。我没有写这部分)。通常,Google Play Services会在第一时间显示通知,通知用户需要授权应用程序访问其帐户,然后缓存令牌

一个用户报告说他从未收到通知,结果调用
getResult()
使应用程序崩溃。在进行了一些调试、挖掘日志并编写了一个测试应用程序之后,我们缩小了原因,因为用户不想收到关于OTA的通知,所以阻止了来自Play Services的通知。显然,由于Play Services无法显示通知,应用程序无法获得授权,因此在调用
getResult()
时崩溃

奇怪的是,它没有抛出异常。在这种情况下,
getResult()
返回一个可以调用以显示授权弹出窗口的意图,就好像
notifyAuthFailure
被设置为
false
,即使您已将其设置为
true
。此外,它跳过函数中的最后一个
返回
,忽略任何其他代码

下面是一些测试代码:

private static Bundle getAccountBundle(Context context, String account) {
    Bundle bundle = null;

    AccountManager accountManager = AccountManager.get(context);
    if (accountManager != null) {
        AccountManagerFuture accountManagerFuture = null;
        try {
            accountManagerFuture = accountManager.getAuthToken(new Account(account, "com.google"), "grandcentral", null, true, null, null);

            // This is where the issue starts
            bundle = (Bundle) accountManagerFuture.getResult();
            return bundle;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    Log.i(TAG, "getAccountBundle: test 1");
    return null;
}
在这里,调用
getResult()
后,
bundle
将包含显示授权弹出窗口的意图,但随后它将跳过执行到最后一行,而不会引发异常

我总是可以返回
bundle
,让调用者检查返回的内容,但为什么要跳到最后呢