自定义身份验证:如何获取自定义用户数据值?

时间:2016-01-04 21:04:08

标签: android android-authenticator

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

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));

我做错了什么?

1 个答案:

答案 0 :(得分:3)

结帐Android AccountManager.getUserData() returns nulladdAccountExplicitly存在已知问题。在使用setUserData(Account, String, String)创建帐户后,传递空Bundle并设置值,而不是传递Bundle中的值。

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