Domanda

Sto lavorando su un'app Android che utilizza il AccountManager per memorizzare account e credenziali.Un problema che ho avuto è quello che anche se passerò in un grappolo di valori di stringa ai ACQUETTOPACKAKEXFITTIVALMENTE Bundle Data.

Ho controllato per assicurarmi che il pacchetto sia non vuoto e che contiene i valori prima di aggiungere l'account.E la maggior parte delle volte questo è il caso, ma ogni volta ogni tanto, ottengo null quando interrogo questi valori.

I valori di ritorno NULL sono più comuni dopo aver appena eliminato l'account e ri-aggiunto.

Sto facendo la mia query all'interno del metodo OnSaccountupondSupdato di AN OnSaccountupondAtelistener implementazione, quindi l'account dovrebbe essere aggiunto e buono per andare, giusto?

Grazie per qualsiasi aiuto

autenticatattività

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

Alcuni altri filetti

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

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

È stato utile?

Soluzione

Sono a conoscenza di un bug in Honeycomb Plus che può causare il tuo problema.Se si tenta di GetUserData dell'account prima che sia registrato tutte le successive chiamate GetUserData restituiranno NULL.

Se guardi il codice.AccountManager ha una cache in memoria che è supportata da un database SQLite.Chiamare GetUserData popola la cache IN-Memory UserData, anche se non è registrata.Se non è registrato interpreta questo come nessun utenteData.La registrazione di un account popola solo il database e non invalida l'archivio in-memory.

Questo potrebbe causare il problema.

La soluzione alternativa è quella di rimuovere l'account prima di chiamare ADDACCOUNTSEXPLICT.

Ya questo problema succhia ed è un enorme bug in accountManger IMO e consente a terze parti di Essence DOS la tua app.

Altri suggerimenti

Stai utilizzando un dispositivo HTC con Android 4?Ho ricevuto molte segnalazioni di questo problema dagli utenti delle mie app di sincronizzazione. Tutto di loro ha utilizzato un dispositivo HTC con il livello SDK 15.

Sembra un bug HTC per me.

Diversi utenti hanno riferito che il problema è svanito dopo un riavvio.

Aggiornamento: Nel frattempo abbiamo trovato una soluzione adeguata, vedere 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top