Вопрос

Я работаю над приложением для Android, которое использует accountmanager для хранения учетных записей и учетных данных.Одна проблема, в которой у меня есть, это то, что, хотя я прохожу в кучу строковых значений к AddacccountCliTliTliTliTliTliTliTliTliTliTliTLITLITLITLITLITLITLE Data.

Я проверил, чтобы убедиться, что пучок не пустое и что он содержит значения перед добавлением учетной записи.И большую часть времени это так, но время от времени я получаю нуль, когда я запрашиваю эти значения.

Значения нулевых возвратов более распространены после того, как я просто удалил учетную запись и повторно добавить ее.

Я делаю свой запрос внутри onaccountsuppdated метод реализации onaccountsupdateListener , поэтому учетная запись должна быть добавлена и хороша, верно?

Спасибо за любую помощь

<Сильная> аутентификационность

// 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");
}
.

Это было полезно?

Решение

Я в курсе одной ошибки в сотовых продуктах, которые могут вызвать вашу проблему.Если вы попытаетесь getUserdata от учетной записи, прежде чем зарегистрирован, все последующие вызовы GetUserData вернется NULL.

Если вы посмотрите на код.AccountManager имеет кэш в памяти, который поддерживается базой данных SQLite.Призывая GetuSerdata заполняет вход в память userdata, даже если он не зарегистрирован.Если он не зарегистрирован, он интерпретирует, что как ни USERDATA.Регистрация учетной записи только заполняет базу данных и не делает недействительным в магазине в памяти.

Это может вызвать вашу проблему.

Обходной путь состоит в том, чтобы удалить учетную запись перед вызовом AddAcCounteClue.

Ya Эта проблема отстой и является огромной ошибкой в Accountermanger IMO и позволяет третьим лицам сущность dos ваше приложение.

Другие советы

Вы используете устройство HTC с Android 4?У меня много сообщений об этом вопросе от пользователей моих приложений синхронизации. Все использовали HTC-устройство с уровнем SDK 15.

выглядит как 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