2016-12-06 16 views
1

In meiner Android App kann ich ein Popup anzeigen, wenn die App aktualisiert wird (basierend auf versionCode). Im Popup habe ich eine Checkbox mit der Aufschrift "dont show me again" gesetzt. Wenn ich darauf klicke, wird es in sharedpref die versionCode speichern und das Popup nicht mehr anzeigen.Android SharedPref beim Neustart nicht speichern

Ich habe gegen etwas seltsames Verhalten gelaufen, wo, wenn ich das neue Set<String> speichere, tat es tatsächlich, es zu speichern, aber wenn meine App neu startet, gehen die Einstellungen verloren.

Set<String> readAnnouncement = getReadAnnouncement(this); 
readAnnouncement.add(String.valueOf(versionCode)); 
PreferenceManager.getDefaultSharedPreferences(this).edit().putStringSet(KEY_READ_ANN, readAnnouncement).apply(); 

Wenn ich Punkt auf readAnnouncement.add brechen, kann ich zum Beispiel stellen Sie die Liste mit 2 Artikeln. Wenn ich die PreferenceManager.getDefaultSharedPrefer... ausführen und dann getReadAnnouncement(this); ausführen, ist der Wert dort, alles gut.

Wenn ich die App neu starten und erneut getReadAnnouncement(this); überprüfe, ist der neue Wert weg.

Durch Löschen des Cache verschwand das Problem ... Warum wurde nicht gespeichert? Ist es möglich, dass die SharedPreference voll waren?

Antwort

0

Versuchen Sie es so.

import android.content.Context; 
import android.content.SharedPreferences; 
/** 
* @author VIVEK 
*   This class deals in with setting Cache value for complete app. 
*/ 
public class SharedPrefUtil{ 

    /*Set Boolean value in shared preferences */ 
    public static void setSharedPref(Context context, String key, boolean value) { 
     // save token in preference 
     SharedPreferences sharedPreferences = context.getSharedPreferences("usb", 0); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean(key, value); 
     editor.commit(); 
    } 

    /*get Boolean value in shared preferences */ 
    public static boolean getSharedPref(Context context, String key, boolean defaultVal) { 
     boolean prefToken = defaultVal; 
     SharedPreferences sharedPreferences = context.getSharedPreferences("usb", 0); 
     prefToken = sharedPreferences.getBoolean(key, false); 
     return prefToken; 
    } 

    /*Set String value in shared preferences */ 
    public static void setSharedPref(Context context, String key, String value) { 
     // save token in preference 
     SharedPreferences sharedPreferences = context.getSharedPreferences("usb", 0); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString(key, value); 
     editor.commit(); 
    } 

    /*get String value in shared preferences */ 
    public static String getSharedPref(Context context, String key, String defaultVal) { 
     String value = defaultVal; 
     SharedPreferences sharedPreferences = context.getSharedPreferences("usb", 0); 
     value = sharedPreferences.getString(key, defaultVal); 
     return value; 
    } 

    public static void cleanSharedPrefFile(Context context) { 
     // save token in preference 
     SharedPreferences sharedPreferences = context.getSharedPreferences("usb", 0); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.clear(); 
     editor.commit(); 
    } 

} // End of main class over here ... 

Jetzt wollen Sie einen Wert in Geteilt Pref setzte dann einstellen, wie diese

SharedPrefUtil.setSharedPref(MainActivity.this, "test", storeBuff); 

Nun, wenn Sie Wert brauchen, um aus dem gemeinsamen Pref rufen dann wie diese

SharedPrefUtil.getSharedPref(MainActivity.this, "test", "default value"); 

In Platz von editor.commit(), verwenden Sie editor.apply()

GRUNDLAGEN:

getDefaultSharedPreferences() verwendet einen Standard-Präferenz-Dateinamen. Dieser Standardwert wird pro Anwendung festgelegt, so dass alle Aktivitäten in der gleichen App Zusammenhang kann es leicht zugreifen, wie im folgenden Beispiel:

SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this); 
if (spref.contains("email")) { 
    String sEmailAddr = spref.getString("email", ""); 
} 

Die Einstellungen werden in der Regel bei /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml

Die alternative Methode gespeichert - getSharedPreferences (Name , mode) erfordert die Angabe eines bestimmten Präferenz- (Datei-) namens und eines Betriebsmodus (z. B. private, world_readable usw.), die einen besseren Zugriff auf Ihre SharedPref-Datei ermöglichen.

+0

Ich werde nicht einfach blinden Random Code kopieren, ohne zu verstehen, was die Ursache des Problems ist. – Johny19

+0

Komplette Klasse über SO aktualisieren – AndroidHacker

+0

Entschuldigung, ich kann das nicht akzeptieren. Auf die ursprüngliche Frage antwortet es nicht. Ich brauche keinen Code. Ich brauche eine Antwort, warum die Pref verloren gehen nach einem Neustart – Johny19

Verwandte Themen