我正在开发一个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中,并且应用程序可以在重新打开后成功使用。
这已在不同的设备和工作站上重现。有关任何可能触发取消的信息也值得赞赏。