2016-02-02 3 views
5

Im Verwendung SharedPreference auf Android, um einen Satz von Strings zu speichern. Es ist gut gespeichert und abgerufen, aber , wenn die App neu gestartet wird einige Daten verloren. Strings werden nacheinander hinzugefügt, und bevor ich sie hinzufüge, rufe ich den Satz auf, füge einen String hinzu und speichere ihn dann erneut. DieseSet <String> Datenverlust beim Wiederherstellen von SharedPreferences nach Neustart der App

ist, wie ich es speichern:

Set<String> emptySet = null; 
      SharedPreferences prefs = getContext().getSharedPreferences(getContext().getString(R.string.pref_disagree_key), Activity.MODE_PRIVATE); 

      String newIdAgreed = getItem(position).getId(); 

      if (prefs.contains(getContext().getString(R.string.pref_disagree_key))) { 

       Set<String> updateSet = prefs.getStringSet(getContext().getString(R.string.pref_disagree_key), emptySet); 
       updateSet.add(newIdAgreed); 
       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putStringSet(getContext().getString(R.string.pref_disagree_key), updateSet); 
       editor.commit(); 

      } else { 
       Set<String> newSet = new HashSet<String>(); 
       newSet.add(newIdAgreed); 
       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putStringSet(getContext().getString(R.string.pref_disagree_key), newSet); 
       editor.commit(); 
      } 

Und das ist, wie ich es wieder:

if (prefsDisagree.contains(getContext().getString(R.string.pref_disagree_key))){ 
     disagree_set = new HashSet<String>(prefsDisagree.getStringSet(getContext().getString(R.string.pref_disagree_key), emptySet)); 
     for (String item: disagree_set){ 
      //stuff done here 


     } 
} 

ich einige ähnliche Fragen zu diesem Thema gesehen, aber keiner der Antworten mein Problem gelöst . Irgendwelche Ideen?

Antwort

4

Das StringSet ist nicht persistent, wenn Sie versuchen, es nach dem Speichern erneut zu bearbeiten. Daher werden neu hinzugefügte Daten nicht gespeichert, wenn Sie die App beenden und erneut öffnen.

Es ist tatsächlich dokumentiert: getStringSet

Sie müssen zuerst die StringSet kopieren und dann einfügen/fügen Sie Daten zu den kopierten StringSet:

Set<String> s = new HashSet<String(prefs.getStringSet(
       getContext().getString(R.string.pref_disagree_key), 
       emptySet));