Pregunta

Estoy trabajando en una aplicación de Android que usa el fedemanager para almacenar cuentas y credenciales.Un problema que he estado teniendo es que a pesar de que me paso en un montón de valores de cadena al paquete de datos AddAccountIncialcitly (EM> AddAccountIncialcitly ".

He comprobado para asegurarse de que el paquete sea no vacío y que sea contiene los valores antes de agregar la cuenta.Y la mayoría de las veces, este es el caso, pero de vez en cuando me pongo nulo cuando consejo estos valores.

Los valores de retorno nulo son más comunes después de haber eliminado la cuenta y reagonzada.

Estoy haciendo mi consulta dentro del método OnAccountSupDated de una implementación de OnAccountsupdatelistener , por lo que la cuenta debe ser agregada y buena para ir, ¿verdad?

Gracias por cualquier ayuda

autenticativity

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

algún otro hilo

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

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

¿Fue útil?

Solución

Soy consciente de un error en Honeycomb Plus que puede causar su problema.Si intenta ingresar a la cuenta de la cuenta antes de que se registre, todas las llamadas posteriores de GetUserData devolverán NULL.

Si miras el código.AccountManager tiene un caché en memoria que está respaldado por una base de datos SQLite.Llamar a GetUSERDATA POGÍA LA CACHA DE MEMORIA DE USUARIO DE MEMORIA, incluso si no está registrado.Si no está registrado, interpreta que no sea userData.El registro de una cuenta solo llena la base de datos y no invalida el almacén en memoria.

Esto puede estar causando su problema.

La solución es eliminar la cuenta antes de llamar a AddAcCOOPCIPLIncly.

Ya este problema apesta y es un error enorme en CuentaManger IMO y permite a terceros en esencia, su aplicación.

Otros consejos

¿Está utilizando un dispositivo HTC con Android 4?Recibí muchos informes de este problema de los usuarios de My Sync Apps. todos de ellos utilizaron un dispositivo HTC con el nivel de SDK 15.

Me parece un error HTC.

Varios usuarios informaron que el problema se desvaneció después de un reinicio.

actualización: Mientras tanto, encontramos una solución adecuada, consulte 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top