Question

Je travaille sur une application Android qui utilise le CompteManager pour stocker des comptes et des informations d'identification.Un problème que j'ai eu est que même si je passe dans un groupe de valeurs de chaîne sur le addaccountExplicit de l'ensemble de données .

J'ai vérifié pour vous assurer que le paquet est pas vide et que celui-ci contient les valeurs avant d'ajouter le compte.Et la plupart du temps, c'est le cas, mais de temps en temps, je reçois NULL lorsque je demande ces valeurs.

Les valeurs de retour NULL sont plus courantes après que je viens de supprimer le compte et que je l'a ajouté.

Je fais ma requête à l'intérieur de la méthode méthode de la mise en œuvre ONAccountsUpdatelistener . Le compte doit donc être ajouté et bon à partir, non?

merci pour toute aide

authencitriceActivité

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

un autre fil

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

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

Était-ce utile?

La solution

Je suis au courant d'un bug de nid d'abeille plus qui peut causer votre problème.Si vous essayez de getUserData du compte avant d'être enregistré, tous les appels de getUserData ultérieurs retourneront NULL.

Si vous regardez le code.CompteManager dispose d'un cache en mémoire qui est soutenu par une base de données SQLite.Calling GetUserData Pumpule le cache en mémoire UserData, même s'il n'est pas enregistré.Si ce n'est pas inscrit, il interprète qu'aucune userData.Enregistrement d'un compte Populaire uniquement à la base de données et n'invalide pas le magasin en mémoire de mémoire.

Cela peut causer votre problème.

La solution de contournement consiste à supprimer le compte avant d'appeler AddaccountExplicitement.

Ya Ce problème suce et est un énorme bogue dans ComptManger IMO et permet aux tiers d'essence à votre application.

Autres conseils

Utilisez-vous un périphérique HTC avec Android 4?J'ai reçu de nombreux rapports de ce numéro des utilisateurs de mes applications de synchronisation. Tous d'entre eux utilisaient un périphérique HTC avec le niveau 15 de SDK.

ressemble à un bogue HTC pour moi.

Plusieurs utilisateurs ont signalé que le problème disparut après un redémarrage.

Mise à jour: En attendant, nous avons trouvé une solution de contournement appropriée, voir 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top