【问题标题】:Custom authentication: how to get custom user data values?自定义身份验证:如何获取自定义用户数据值?
【发布时间】:2016-04-08 13:50:29
【问题描述】:

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

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

我做错了什么?

【问题讨论】:

    标签: android android-authenticator


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我不知道这个错误。
    • 你能提供一个实际错误的链接吗?
    • 对不起,我不能。我从来没有搜索过错误报告,也没有提交过。我的发现含糊不清,无法创建经过证实的错误报告。但是,我们从未见过setUserData 出现类似问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2020-04-01
    • 2022-12-10
    • 1970-01-01
    相关资源
    最近更新 更多