uso usar studio sirve que para móviles limpiar importancia getsharedpreferences example como aplicaciones android xml sharedpreferences

android - usar - El valor de SharedPreferences no se actualiza



sharedpreferences android example (5)

Estoy tratando de actualizar los valores de SharedPreferences , aquí está mi código:

edit = PreferenceManager.getDefaultSharedPreferences(this).edit(); edit.putString(Settings.PREF_USERNAME+"",txtuser); edit.putString(Settings.PREF_PASSWORD+"",txtpass); edit.commit();"

El problema es que cuando accedo a estos valores, no está devolviendo valores actualizados, me da un valor de SharedPreferences.

Pero cuando confirmo los datos en un archivo XML , los datos se actualizan en ese archivo.

Y después de reiniciar mi aplicación, obtengo los valores actualizados. Por lo tanto, es necesario reiniciar la aplicación para obtener valores actualizados.
Entonces, ¿cómo obtener esos valores actualizados una vez que cambia?

Gracias por adelantado

Aquí está mi código completo:

@Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); ctx=this; status=PreferenceManager.getDefaultSharedPreferences(this).getString(Settings.PREF_STATUS, Settings.DEFAULT_STATUS);// get old value submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { on(ctx,true);// function will call and value is updated } }}); status=PreferenceManager.getDefaultSharedPreferences(this).getString(Settings.PREF_STATUS, Settings.DEFAULT_STATUS);// this should give me a updated value but gives old value } public static boolean on(Context context) { return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(Settings.PREF_ON, Settings.DEFAULT_ON); } public static void on(Context context,boolean on) { if (on) Receiver.engine(context).isRegistered(); // } **********in reciver file*********** public void isRegistered ) { Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit(); edit.putString(Settings.PREF_STATUS+"","0"); edit.commit(); }


Bueno, incluso si mi respuesta llegó 3 años después de la pregunta, espero que ayude. El problema no parece provenir de la confirmación o la aplicación, sino de la estructura del código.

Expliquemos: en un teléfono inteligente, ejecuta una aplicación pero no la abandona como lo hacemos en las computadoras. Esto significa que cuando vuelva al menú del teléfono inteligente, la aplicación seguirá "en ejecución". Cuando "haces clic" nuevamente en el ícono de la aplicación, no vuelves a ejecutar la aplicación, solo la despiertas. En el código juned, podemos ver que llama a getDefaultSharedPreferences dentro de su función Crear.

Así que llama a getDefaultSharedPreferences cuando ejecuta la aplicación por primera vez. Pero cuando establece la aplicación en segundo plano y luego despierta la aplicación, la llamada no se realiza.

He tenido el mismo problema: compruebo si tengo SharedPreference para mi APP. Si no, le pido un formulario para pedirle valor al usuario. En caso afirmativo, compruebo la fecha de las preferencias. Si es demasiado viejo, le pido el formulario. Después del formulario, guardo las preferencias con la fecha actual. Lo que noté es que la prueba sobre la existencia de SharedPreference (que se estableció en la misma ubicación que la de juned) se realizó solo en la primera ejecución de la aplicación, pero no cuando despierto la aplicación. ¡Esto significa que no pude verificar el límite de tiempo de mis SharedPreferences!

¿Cómo resolver eso? Solo agrega:

@Override public void onResume(){ super.onResume(); // And put the SharedPreferences test here }

Este código se llamará a la primera ejecución de la aplicación, pero también cada vez que el usuario lo despierte.


En lugar de usar edit.commit(); , debes usar edit.apply(); . Aplicar actualizará el objeto de preferencia al instante y guardará los nuevos valores de forma asíncrona , lo que le permitirá leer los últimos valores.

cometer()

Confirme los cambios de preferencias de este Editor al objeto SharedPreferences que está editando. Esto realiza atómicamente las modificaciones solicitadas, reemplazando lo que se encuentra actualmente en las SharedPreferences.

Tenga en cuenta que cuando dos editores modifican las preferencias al mismo tiempo, el último en llamar a confirmación gana.

Si no le importa el valor de retorno y lo está utilizando desde el hilo principal de su aplicación, considere usar apply () en su lugar.

aplicar()

Confirme los cambios de preferencias de este Editor al objeto SharedPreferences que está editando. Esto realiza atómicamente las modificaciones solicitadas, reemplazando lo que se encuentra actualmente en las SharedPreferences.

Tenga en cuenta que cuando dos editores están modificando las preferencias al mismo tiempo, el último en llamar aplica gana.

A diferencia de commit (), que escribe sus preferencias en el almacenamiento persistente sincrónicamente, apply () confirma sus cambios en las SharedPreferences en la memoria de inmediato, pero inicia una confirmación asíncrona en el disco y no se le notificará ningún error. Si otro editor en este SharedPreferences hace un commit regular () mientras un apply () todavía está pendiente, el commit () se bloqueará hasta que se completen todos los commit asíncronos, así como el commit mismo.

Como las instancias de SharedPreferences son singletons dentro de un proceso, es seguro reemplazar cualquier instancia de commit () con apply () si ya estaba ignorando el valor de retorno.

No necesita preocuparse por los ciclos de vida de los componentes de Android y su interacción con apply () escribiendo en el disco. El marco garantiza que las escrituras en el disco en vuelo desde apply () se completen antes de cambiar de estado.


Espero que te ayude..

SharedPreferences mypref = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor prefsEditr = mypref.edit(); prefsEditr.putString("Userid", UserId); prefsEditr.commit(); String task1 = mypref.getString("Userid", "");


Prueba asi

public SharedPreferences prefs; SharedPreferences.Editor editor = prefs.edit(); editor.putString(Settings.PREF_USERNAME+"", txtuser); editor.putString(Settings.PREF_PASSWORD+"", entered_name); editor.commit();


Prueba este código:

SharedPreferences edit = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor1 = edit.edit(); editor.putString(Settings.PREF_USERNAME + "", txtuser); editor.putString(Settings.PREF_PASSWORD + "", entered_name); editor.commit();