Android AccountManager addAccount在回调时抛出OperationCanceledException

时间:2014-07-12 00:25:23

标签: android accountmanager

我正在开发一个Android应用程序,使用android studio(0.8.2)和API级别19。

我已使用AccountManager实现了身份验证,但在尝试从AccountManager.addAccount中指定的回调返回的AccountManagerFuture中检索数据时遇到了异常。只有在我的应用程序中调用addAccount时才会出现此行为,而MainActivity的onCreate则是精确的。通过android设置屏幕添加帐户时不会发生此错误。以下是调用addAccount的代码:

mAccounts = mAccountManager.getAccountsByType(mAccountType);
    if (mAccounts.length == 0) {
        Log.d("MainActivity", "No accounts of type " + mAccountType);
        mAccountManager.addAccount(
                mAccountType,
                AUTHTOKEN_TYPE_FULL_ACCESS,
                null,
                new Bundle(),
                this,
                new OnAccountAddComplete(),
                null
            );
    }

这是回调:

private class OnAccountAddComplete implements AccountManagerCallback<Bundle> {
    @Override
    public void run(AccountManagerFuture<Bundle> result) {
        Bundle bundle;
        try {
            bundle = result.getResult();
        } catch (OperationCanceledException e) {
            e.printStackTrace();
            return;
        } catch (AuthenticatorException e) {
            e.printStackTrace();
            return;
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        mAccount = new Account(
                bundle.getString(AccountManager.KEY_ACCOUNT_NAME),
                bundle.getString(AccountManager.KEY_ACCOUNT_TYPE)
        );
        // do more stuff
    }
}

这些遵循此example中显示的模式。身份验证系统和活动严格遵循给定here的示例,特别是登录和注册活动。在SignUpActivity结束(第104行)和AuthenticatorActivity(第81行)中的回调之间记录异常

W/System.err﹕ android.accounts.OperationCanceledException
W/System.err﹕ at android.accounts.AccountManager$AmsTask.internalGetResult(AccountManager.java:1503)
W/System.err﹕ at android.accounts.AccountManager$AmsTask.getResult(AccountManager.java:1531)
W/System.err﹕ at android.accounts.AccountManager$AmsTask.getResult(AccountManager.java:1452)
W/System.err﹕ at com.example.project.app.MainActivity$OnAccountAddComplete.run(MainActivity.java:256)
W/System.err﹕ at android.accounts.AccountManager$11.run(AccountManager.java:1427)
W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:733)
W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5001)
W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)

result.getResult的调用会引发android.accounts.OperationCanceledException。该文档仅指示用户干预或其他事件已取消操作。尽管如此,新帐户已创建并添加到AccountManager中,并且应用程序可以在重新打开后成功使用。

这已在不同的设备和工作站上重现。有关任何可能触发取消的信息也值得赞赏。

0 个答案:

没有答案