2012-05-28 7 views
46

Mi código es:getDefaultSharedPreferences Android

final String eulaKey = "mykey"; 
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
boolean hasBeenShown = prefs.getBoolean(eulaKey, false); 

Siempre devuelve valores diferentes dependiendo de la versión del sistema operativo. Probado en 2.2, 2.3.4, 3.2, 4.0.3 - devuelve el valor correcto. Pero para el dispositivo Zte blade con 2.3.7 con CianogenMod 7.1, el resultado siempre es falso. Supongo que el valor predeterminado para getBoolean.

Aquí es escribir código booleano:

final String eulaKey = "mykey"; 
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
SharedPreferences.Editor editor = prefs.edit(); 
editor.putBoolean(eulaKey, true); 
editor.commit(); 

¿Alguien tiene alguna idea?

Actualización: Comparando mi código actual con mi versión anterior de código - no hay diferencia en el código. La única diferencia es en manifiesto: el código funciona bien con minVersion = 8 y targetVersion = 8 Ahora estoy compilando con minversion = 8 y target = 13/debido a Admob /. Quizás algunas API hayan cambiado, pero no he encontrado nada al respecto.

SOLUCIÓN: -Se inicia la aplicación desde el acceso directo y desde el menú me da diferentes DefaultSharedPreferences. Después de eliminar DefaultSharedPreferences de mi código, funciona perfecto. No puedo decir simplemente: la gente no hace accesos directos, así que tuve que cambiar el código.

+1

No es insólito que algunos dispositivos pierdan datos al azar SharedPreferences. Consulte http://code.google.com/p/android/issues/detail?id=14359 para ver un ejemplo. –

+0

¿Esta información está relacionada solo con getDefaultSharedPreferences? ¿Conoces los mismos problemas sobre getSharedPreferences ("myAppPrefs", Context.MODE_PRIVATE); ? – Kostadin

+0

intente con getSharedPreferences que el predeterminado. Funciona bien – png

Respuesta

50

Trate de esta manera:

final String eulaKey = "mykey"; 
Context mContext = getApplicationContext(); 
mPrefs = mContext.getSharedPreferences("myAppPrefs", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = mPrefs.edit(); 
editor.putBoolean(eulaKey, true); 
editor.commit(); 

en cuyo caso puede especificar sus propias preferencias nombre del archivo (myAppPrefs) y pueden controlar el acceso persmission a ella. Otros modos de operación incluyen:

  • MODE_WORLD_READABLE
  • MODE_WORLD_WRITEABLE
  • MODE_MULTI_PROCESS
+3

Al iniciar la aplicación desde el acceso directo y desde el menú, me da diferentes DefaultSharedPreferences. Después de eliminar DefaultSharedPreferences de mi código, funciona perfecto. No puedo decir simplemente: la gente no hace shrotcuts, así que tuve que cambiar el código. – Kostadin

Cuestiones relacionadas