2017-03-20 2 views
0

Ich versuche, eine Liste mit denselben Werten zweimal in den Einstellungen zu schreiben, und wenn ich es lese, bekomme ich nur 1 Ergebnis. Hier mein SharedPreferences-Code ist:SharedPreferences, um Daten nicht zu überschreiben

public void storeDeviceDetails(final ArrayList<String> deviceDetails) { 
     SharedPreferences.Editor editor = context.getSharedPreferences("devicePrefs",Context.MODE_PRIVATE).edit(); 

     Set<String> set = new LinkedHashSet<>(); 
     set.addAll(deviceDetails); 
     editor.putStringSet("deviceDetails", set); 
     editor.apply(); 
    } 

    public ArrayList<String> retrieveDeviceDetails() { 
     SharedPreferences prefs = context.getSharedPreferences("devicePrefs", MODE_PRIVATE); 
     ArrayList<String> details = null; 

     Set<String> set = prefs.getStringSet("deviceDetails", null); 

     if (set != null) { 
      details = new ArrayList<>(set); 
     } 

     return details; 
    } 

ich es schreibe, wie es in 2 aufeinander folgenden Zeilen zur Liste -

MyPrefClass.storeDeviceDetails(myList); 
MyPrefClass.storeDeviceDetails(myList); 

Und jetzt in der nächsten Zeile ich MyPrefClass.retrieveDeviceDetails(); ich es nur als - [hero2lte, 7.0, hero2ltexx, SM-G935F, samsung]

+1

Lieber eine echte [mcve] für uns bereitstellen; anstatt Teile Ihres Codes abzulegen. – GhostCat

+0

Sie übergeben eine Liste an ein Set und ein Set enthält keine doppelten Werte – giorashc

+0

Mögliche Duplikate von [Kann ich zwei oder mehr Werte mit demselben Schlüssel mit SharedPreferences in Android speichern?] (Http://stackoverflow.com/questions/13623098/can-i-store-two-or-more-values-mit-same-key-using-sharedpreferences-in-android) –

Antwort

1

Sie machen ein neues Set, also überschreibt es das alte komplett.

Versuchen Sie, das bereits in SharedPreferences vorhandene Set abzurufen, falls es vorhanden ist, und erstellen Sie nur dann ein neues Set, wenn dies nicht der Fall ist. So etwas wie das:

Set<String> set = prefs.getStringSet("deviceDetails", null); 

if (set == null) { 
    set = new LinkedHashSet<>(); 
} 

Auch, wie in den Kommentaren erwähnt, fügen Sie die gleichen Elemente zweimal hinzu. Selbst wenn Sie es reparieren sollten, garantiert eine Set Eindeutigkeit, so dass sie nur einmal hinzugefügt wurden.

+0

Ok ich versuche tatsächlich Array-Liste in gemeinsamen Einstellungen zu speichern. Wie kann ich das machen ? – MagdHo0506

+0

Erstellen Sie eine Array-Liste anstelle einer Menge ... – Cruncher

+2

@Cruncher SharedPreferences speichert keine Listen. Wenn er das braucht, muss er einen anderen Speichermechanismus verwenden. Wenn die Einstellung für ihn ausreicht, funktioniert Ihre Antwort. –

Verwandte Themen