0

我有自定义身份验证器。并输入如下所示的帐户信息:

final AccountManager am = AccountManager.get(AuthActivity.this);
final Bundle result = new Bundle();
final Bundle userData = new Bundle();
userData.putString(KEY_NAME, mName);
userData.putString(KEY_EMAIL, mEmail);

Account account = new Account(mLogin, vcs.getAccountType());

if (am.addAccountExplicitly(account, null, userData)) {
    result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
    result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
    result.putString(AccountManager.KEY_AUTHTOKEN, mAccessToken);
    result.putString(KEY_REFRESH_TOKEN, mRefreshToken);
    am.setAuthToken(account, account.type, mAccessToken);
} else {
    result.putString(AccountManager.KEY_ERROR_MESSAGE, "F@ck|n8 authenticator");
}

setAccountAuthenticatorResult(result);
setResult(RESULT_OK);
finish();

但是,当我需要这些自定义值时,我该如何获取呢?

我试着得到它:

tvUsername.setText(accountManager.getUserData(account, AuthActivity.KEY_NAME));
tvEmail.setText(accountManager.getUserData(account, AuthActivity.KEY_EMAIL));

我做错了什么?

4

1 回答 1

3

查看Android AccountManager.getUserData() 返回 null。存在一个已知问题addAccountExplicitly。与其传递 Bundle 中的值,不如传递一个空的 Bundle 并在使用setUserData(Account, String, String)创建帐户后设置值。

IIRC,问题是客户经理服务代码中的缓存问题。如果您删除一个帐户并立即重新创建相同的帐户,则用户数据缓存中不会填充捆绑包中传递的值。使用setUserData可以解决此问题。

于 2016-01-04T22:36:03.013 回答