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 に答える