tutorial studio preferencias activity android android-preferences

studio - ¿Cómo obtener todas las claves de SharedPreferences programáticamente en Android?



preferencias en android studio (5)

Aunque la respuesta de @ Blackbelt es bastante popular aquí, creo que en realidad no está enfocando la pregunta. (No es sorprendente ya que la pregunta mezcla la terminología de los nombres y las claves de las preferencias.) Supongo que la pregunta es cómo averiguar qué instancias de preferencias compartidas se han creado, lo que puede ser de interés si los nombres se crean dinámicamente.

Aquí hay dos estrategias para eso:

  • crear otra instancia de "meta" de preferencias compartidas donde todas las instancias de prefences compartidas creadas se registran agregando un par de clave / valor para las metafrecuencias - siendo la clave el nombre de las preferencias compartidas y el valor siendo cualquier valor, por ejemplo, true .

    getSharedPreferences( DYNAMIC_PREFS_NAME, 0 ) .edit().put*(*).apply(); getSharedPreferences( "meta_prefs_index", 0 ) .edit().putBoolean( DYNAMIC_PREFS_NAME, true).apply();

    Para obtener todas las contraseñas compartidas creadas por usted, use las metapreferencias y siga la respuesta de @Blackbelt.

  • las preferencias compartidas tienen un archivo de copia de seguridad, que se almacena en la carpeta /data/data/YOUR_PACKAGE_NAME/shared_prefs con el nombre YOUR_PREFS_NAME.xml para que pueda buscar en ese directorio sus archivos de preferencias compartidas. ¡Pero tenga cuidado, puede haber archivos de preferencias compartidas que no fueron creados por su lógica! Por lo tanto, me quedaría con el primer enfoque.

¿Cómo obtener todas las claves en SharedPreferences , no el valor de la preferencia solo con la tecla?

prefA = getSharedPreferences("MyAttack", MODE_PRIVATE); prefB= getSharedPreferences("MySkill", MODE_PRIVATE);


Lo que puede hacer es usar el método getAll () de SharedPreferences y obtener todos los valores en Map y luego puede iterar fácilmente a través de ellos:

Map<String,?> keys = prefs.getAll(); for(Map.Entry<String,?> entry : keys.entrySet()){ Log.d("map values",entry.getKey() + ": " + entry.getValue().toString()); }

Para más información, puede verificar la implementación de dump () de PrefUtil.java con este link .


Use el método getAll() de android.content.SharedPreferences .

Map<String, ?> map = sharedPreferences.getAll();


Vea el siguiente código para el método getAll()

Map<String, ?> prefsMap = prefA.getAll(); for (Map.Entry<String, ?> entry: prefsMap.entrySet()) { Log.v("SharedPreferences", entry.getKey() + ":" + entry.getValue().toString()); }


SharedPreferences tiene el método getAll() que devuelve un Map<String, ?> . Desde el Mapa puede recuperar fácilmente las claves con keySet() y las asignaciones de clave / valor con entrySet() :

Map<String, ?> allEntries = prefA.getAll(); for (Map.Entry<String, ?> entry : allEntries.entrySet()) { Log.d("map values", entry.getKey() + ": " + entry.getValue().toString()); }