2012-05-28 4 views
46

Mein Code ist:Android getDefaultSharedPreferences

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

immer unterschiedliche Werte je nach OS-Version zurückgibt. Getestet in 2.2, 2.3.4, 3.2, 4.0.3 - gibt den korrekten Wert zurück. Aber für Gerät Zte Blade mit 2.3.7 mit CianogenMod 7.1 - Ergebnis ist immer falsch. Ich vermute Standardwert für getBoolean.

Hier Code schreiben boolean:

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

Hat jemand eine Idee?

Update: Vergleiche meinen aktuellen Code mit meiner früheren Version des Codes - es gibt keinen Unterschied im Code. Nur der Unterschied ist offensichtlich: Code funktioniert Ok mit minVersion = 8 und targetVersion = 8 Jetzt kompiliere ich mit minversion = 8 und Ziel = 13/wegen Admob /. Vielleicht haben sich einige APIs geändert, aber ich habe dazu nichts gefunden.

LÖSUNG: -Start App aus Verknüpfung und aus dem Menü gibt mir verschiedene DefaultSharedPreferences. Nach dem Entfernen von DefaultSharedPreferences aus meinem Code - es funktioniert perfekt. Ich kann nicht einfach sagen: Leute machen keine Abkürzungen, also musste ich den Code ändern.

+1

Es ist nicht ungewöhnlich für einige Geräte, um zufällig SharedPreferences Daten verloren gehen. Ein Beispiel finden Sie unter http://code.google.com/p/android/issues/detail?id=14359. –

+0

Sind diese Informationen nur auf getDefaultSharedPreferences bezogen? Kennen Sie die gleichen Probleme mit getSharedPreferences ("myAppPrefs", Context.MODE_PRIVATE); ? – Kostadin

+0

versuchen Sie es mit getSharedPreferences als die Standardwerte. Es funktioniert gut – png

Antwort

50

Versuchen Sie es so:

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(); 

, in dem Fall, dass Sie Ihre eigenen Vorlieben Dateinamen angeben können (myAppPrefs) und Zugang persmission, um es zu kontrollieren. Andere Betriebsarten sind:

  • MODE_WORLD_READABLE
  • MODE_WORLD_WRITEABLE
  • MODE_MULTI_PROCESS
+3

Das Starten der App aus der Verknüpfung und aus dem Menü gibt mir verschiedene DefaultSharedPreferences. Nach dem Entfernen von DefaultSharedPreferences aus meinem Code - es funktioniert perfekt. Ich kann nicht einfach sagen: Leute machen keine Schrittzeichnungen, also musste ich den Code ändern. – Kostadin