我得到了这个问题的解决方案。
问题:删除/添加帐户仍然是空account
对象
解决方案1:
首先,我使用删除帐户removeAccount()
,然后尝试在后台线程中执行,同时调用 addAccountExplicitlyaddAccountExplicitly
并进行进一步处理。removeAccount()
所以我改变了我的流程,因为我使用removeAccount
了AccountManager类的方法并在那个处理程序中完成了整个过程,所以我在回调区域内编写了我的代码。
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
mAccountManager.removeAccount(accounts[0], LoginActivity.this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
// Creating the account on the device and setting the auth token we got
// (Not setting the auth token will cause another call to the server to authenticate the user)
mAccountManager.addAccountExplicitly(account, accountPassword, intent.getBundleExtra(AccountManager.KEY_USERDATA));
mAccountManager.setAuthToken(account, authTokenType, authToken);
/**
* Setting for Sync Adapter
* Syncing Configuration
*/
SyncAdapter.configSyncAdapter(mContext);
}
}, null);
} else {
mAccountManager.removeAccount(accounts[0], new AccountManagerCallback<Boolean>() {
@Override
public void run(AccountManagerFuture<Boolean> future) {
// Creating the account on the device and setting the auth token we got
// (Not setting the auth token will cause another call to the server to authenticate the user)
mAccountManager.addAccountExplicitly(account, accountPassword, intent.getBundleExtra(AccountManager.KEY_USERDATA));
mAccountManager.setAuthToken(account, authTokenType, authToken);
/**
* Setting for Sync Adapter
* Syncing Configuration
*/
SyncAdapter.configSyncAdapter(mContext);
}
}, null);
}
解决方案2:
我找到了名为renameAccount() 的方法,但它需要最低 sdk 版本 21。根据文档:
重命名指定的帐户。这相当于删除现有帐户并使用旧帐户的用户数据添加新的重命名帐户。
从主线程调用此方法是安全的。
谢谢你。