¿Cómo puedo forzar SharedPreferences para guardar?
Frecuentes
Visto 686 equipos
1
Por lo que puedo decir, los valores no se almacenan en Android SharedPreferences
hasta que se accede a ellos explícitamente. Es decir, si bien pueden tener valores predeterminados en XML, no se coloca ningún valor en un SharedPreferences
store hasta que se llame a un método de acceso, razón por la cual todos los accesos tienen parámetros "predeterminados" incluidos.
Si bien esto no es un gran problema simplemente para extraer valores del almacén de preferencias, evita cualquier intento de obtener todas las claves de preferencia que se usan en la aplicación, incluso si están almacenadas en XML. Las teclas no aparecen cuando SharedPreferences#getAll()
se llama a menos que ya se haya accedido explícitamente a la preferencia.
¿Hay alguna forma de forzar que todas las preferencias definidas en XML se guarden en un SharedPreferences
¿Tienda? La solución más cercana que puedo encontrar es analizar manualmente los archivos XML de preferencia, encontrar todas las claves y valores predeterminados, y guardar el valor predeterminado para cada uno. ¿Hay un enfoque más limpio?
ACTUALIZACIÓN
Después de analizar esto con más profundidad, obtuve una lista parcial de preferencias por un motivo diferente. Cuando se establecen los valores predeterminados, sólo EditTextPreference
y ListPreference
los valores se guardan. Los otros dos, una preferencia personalizada y un CheckBoxPreference
, son completamente ignorados. He aquí un ejemplo de la CheckBoxPreference
eso está siendo ignorado:
<CheckBoxPreference
android:defaultValue="false"
android:key="PREF_NAME"
android:summary="Summary text"
android:title="Title" />
¿Alguna idea de por qué no se están configurando todos los valores predeterminados?
2 Respuestas
2
Puedes usar PreferenceManager::setDefaultValues
. Por ejemplo, en su Application::onCreate
método.
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
Si el último argumento es false
, esto solo establecerá los valores predeterminados si nunca se ha llamado a este método en el pasado.
contestado el 22 de mayo de 12 a las 20:05
0
La razón de las preferencias que faltan en mi caso era en realidad un error de Android. La solución fue establecer manualmente las preferencias que faltaban en sus valores predeterminados, como se indica en una pregunta duplicada: Valor predeterminado de Android CheckBoxPreference
contestado el 23 de mayo de 17 a las 13:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas android xml sharedpreferences android-preferences or haz tu propia pregunta.
Parece que el problema es un poco más sutil, aunque ciertamente esa es la respuesta correcta al problema que pensé que estaba teniendo. - Derekerdmann
Estoy marcando su respuesta como aceptada ya que respondió a la pregunta que hice, y es probable que eso atraiga más a los usuarios que el problema real que encontré. - Derekerdmann