SharedPreferences tiene el método getAll, pero no devuelve ninguna entrada a pesar de que existen algunas claves:
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
devuelve verdadero
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
devuelve mapa vacío
¿Qué está mal? ¿Cómo obtener una lista de todas las preferencias compartidas?
android
sharedpreferences
Eugene Chumak
fuente
fuente
getAll()
puede devolverNULL
valor. Sería mejor buscarkeys
NULL.entry.getValue()
queentry.getValue().toString()
no obtener NullPointerException)creo que la pregunta tiene más que ver con por qué
PreferenceManager.getDefaultSharedPreferences(this).getAll()
devuelve un mapa vacío / contradictorio que con cómo iterar sobre un mapa estándar de Java. el documento de Android no es muy claro sobre lo que está sucediendo aquí, pero básicamente parece ser la primera llamada a
PreferenceManager.setDefaultValues(this, R.xml.preferences,false)
- que es lo que se supone que debe llamar para inicializar las preferencias cuando inicia su aplicación - crea algún tipo de versión en caché de sus preferencias que hace que los cambios futuros en su archivo de preferencias xml se manejen de manera inconsistente, es decir, causando la falta de coincidencia descrito en su pregunta.
para restablecer esta "entidad almacenada en caché", siga estos pasos (que puede encontrar en el enlace anterior):
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); prefs.edit().clear(); PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
fuente
en caso de que alguien quiera iterar a través de preferencias compartidas en KOTLIN
sharedPreferences?.all?.forEach { //access key using it.key & value using it.value Log.d("Preferences values",it.key() + ": " + it.value() }
fuente