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

我已检查以确保捆绑包不为空,它包含在添加帐户之前的值。而且大部分时间都是如此,但是当我查询这些值时,每次偶尔都会获得空。

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

我正在在 onaccountsupddated 方法中在 onaccountsupdatelisteNistener 实现的情况下进行查询,因此应添加帐户并更好地进行,右?

感谢任何帮助

身份验证者

// 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填充内存缓存userData,即使没有注册。如果未注册,则它将解释为没有UserData。注册帐户只填充数据库,不会使存储器存储无效。

这可能会导致您的问题。

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

ya这个问题很糟糕,是accountmanger imo的一个巨大的错误,允许第三方对您的应用程序进行精华。

其他提示

您是使用带Android 4的HTC设备吗?我有许多来自我的同步应用程序的用户的报告。它们的所有它们使用了具有SDK级别15的HTC设备。

对我看起来像一个htc bug。

几个用户报告了重启后的问题消失了。

更新:同时我们找到了一个适当的解决方法,请参阅 https://stackoverflow.com/a/29776224/1558654

I had a similar issue, but my problem turned out to be attempting to store a long userData value instead of a String. Converting my long to a string for storage, and parsing it into a long again when pulling it out did the trick for me.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top