gpt4 book ai didi

android - 尽管已设置,但 AccountManager getUserData 返回 null

转载 作者:可可西里 更新时间:2023-11-01 19:06:15 27 4
gpt4 key购买 nike

我正在开发一个使用 AccountManager 来存储帐户和凭据的 Android 应用程序。我遇到的一个问题是,即使我将一堆字符串值传递给 AccountManager 的 addAccountExplicitly 数据包。

我已检查以确保 bundle 不为空并且它包含添加帐户之前的值。大多数时候都是这种情况,但偶尔我在查询这些值时会得到 null。

空返回值在我刚刚删除帐户并重新添加后更常见。

我在 OnAccountsUpdateListener 实现的 onAccountsUpdated 方法中进行查询,所以应该添加帐户并且一切顺利,对吧?

感谢您的帮助

AuthenticatorActivity

// in the AuthenticatorActivity
Bundle userData = new Bundle();
userData.put (k1, v1);
userData.put (k2, v2);
userData.put (k3, v3);
userData.put (k4, v4);
userData.put (k1, v1);

Account a = new Account ("acc name", "com.account.type");
AccountManager am = AccountManager.get(this);

OnAccountsUpdateListener listener = new OnAccountsUpdateListener() {

@Override
public void onAccountsUpdated(Account[] accounts) {
Account mine = findAccount(accounts, account); // match account name
notifySignedIn(mine); // tell the world you're signed in
am.removeOnAccountsUpdatedListener(this);
}
};

am.addOnAccountsUpdatedListener(listener, handler, false);
am.addAccountExplicitly(a, "themostsecurepwintheworld", userData);

一些其他线程

AccountManager am = AccountManager.get(mContext);
final string value2 = am.getUserData(mAccount, k2);

if (TextUtils.isEmpty(value2)) {
Log.d("WTF", "value is empty");
}

最佳答案

我知道 Honeycomb plus 中的一个错误可能会导致您的问题。如果您在帐户注册之前尝试获取该帐户的 getUserData,则所有后续的 getUserData 调用都将返回 null。

如果你看一下代码。 AccountManager 有一个由 sqlite 数据库支持的内存缓存。调用 getUserData 填充内存缓存用户数据,即使它没有注册。如果未注册,则将其解释为没有用户数据。注册帐户只会填充数据库,不会使内存存储失效。

这可能会导致您的问题。

解决方法是在调用 addAccountExplicitly 之前删除帐户。

是的,这个问题很糟糕,是 AccountManger IMO 中的一个巨大错误,允许第三方对您的应用进行 DOS 处理。

关于android - 尽管已设置,但 AccountManager getUserData 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10657658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com