2016-08-21 5 views
0

Meine sharedPreferences bleiben nicht bestehen, nachdem ich die App geschlossen habe. Es behält immer die Standardeinstellung 4, die ich beim ersten Start der App hinzufüge.SharedPreferences werden nach dem Neustart nicht gespeichert.

 static public Boolean addFavoriteItem(Integer itemId, Context c) { 
    SharedPreferences s = PreferenceManager.getDefaultSharedPreferences(c); 
    Set<String> list = new HashSet<>(); 
    list = s.getStringSet("favItems",list); 
    list.add(Integer.toString(itemId)); 
    s.edit().putStringSet("favItems",list).apply(); 
    Log.d("listNowAdd:",list.toString()); 
    return true; 
} 
static public Boolean removeFavoriteItem(Integer itemId, Context c) { 
    SharedPreferences s = PreferenceManager.getDefaultSharedPreferences(c); 
    Set<String> list = new HashSet<>(); 
    list = s.getStringSet("favItems",list); 
    list.remove(Integer.toString(itemId)); 
    s.edit().putStringSet("favItems",list).apply(); 
    Log.d("listNowRemove:",list.toString()); 
    return true; 
} 

Es ist vorübergehend Arbeit, auch nach der Aktivität neu gestartet wird, aber nicht, nachdem die App geschlossen und wieder geöffnet, irgendwelche Ideen?

Antwort

5

Sie können nicht ändern, die StringSet von SharedPreferences als documented zurückgegeben:

Beachten Sie, dass darf nicht die eingestellte Instanz von diesem Aufruf zurückgegeben ändern. Die Konsistenz der gespeicherten Daten ist nicht garantiert, auch wenn Sie die Instanz nicht ändern können.

Wesentlichen, was passiert ist, dass Sie die Set von SharedPreferences besessen sind zu ändern. Es "funktioniert" während die App läuft, da der gleiche (von Ihnen modifizierte) Set im Speicher gehalten wird. Wenn Sie versuchen, die Änderungen zu speichern, vergleicht die Implementierung der gemeinsamen Einstellungen die Werte unter Verwendung von equals() und natürlich ist die Menge identisch mit sich selbst, und daher werden keine Änderungen tatsächlich gespeichert.

Sie können eine neue Set<String> z. HashSet<String> und addAll() das Set, das Sie aus den gemeinsamen Einstellungen abgerufen haben, und nehmen Sie Ihre Änderungen an dieser Kopie vor.

Verwandte Themen