2012-03-06 21 views
7

Tengo user_preferences.xml en mi directorio xml. A PreferencesActivity utiliza este archivo para crear la actividad de preferencias del usuario ... y eso funciona. Cualquier cosa que el usuario seleccione aquí persiste. Pero no puedo recuperar el valor que el usuario seleccionó.¿Por qué preferences.getString ("clave", "DEFAULT") siempre devuelve "DEFAULT"?

Cuando uso ...

SharedPreferences preferences = getSharedPreferences("user_preferences.xml", 0);  
    String mapTypeString = preferences.getString("map_type_pref_key", "DEFAULT"); 

... mapTypeString es siempre "por defecto".

Parece que mi user_preferences.xml no se encuentra cuando instalo mi objeto SharedPreferences. Pero, la actividad de preferencias lo encuentra, por supuesto. Entonces, ¿qué me estoy perdiendo?

¡Muchas gracias!

+0

¿Estás seguro de que estás leyendo el mismo archivo de preferencias? – SERPRO

+0

En onCreate() en mi PreferenceActivity, uso \t \t addPreferencesFromResource (R.xml.user_preferences); Entonces, ¿debo señalar el archivo de manera diferente cuando creo el objeto SharedPreferences? – Hap

+0

@SERPRO ¿hay algún problema porque el xml está dentro del directorio xml? – Hap

Respuesta

9

cambiar el código para:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
String mapTypeString = preferences.getString("map_type_pref_key", "DEFAULT"); 
+2

Eso funciona, gracias. Pero todavía estoy un poco confundido ... Utilizo otro xml que también almacena preferencias en la misma actividad. ¿Por qué getDefaultSharedPreferences me da user_preferences.xml y no el otro, settings.xml? – Hap

0

Usted tiene que comprometerse las preferencias después de editarlo.

SharedPreferences preferences = getSharedPreferences("user_preferences.xml", 0); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putString("map_type_pref_key", "blah_blah"); 
editor.commit(); 
+2

"Pero no puedo recuperar el valor que el usuario seleccionó". Él quiere recuperar, no cambiar. –

Cuestiones relacionadas