ArrayList-Sortierung durcheinander nach Speichern

  • 5 Antworten
  • Letztes Antwortdatum
D

Dakine

App-Anbieter (In-App)
4
Ich habe eine ArrayList (contentList) mit Strings, die ich in den SharedPreferences speichere. Dafür muss ich die ArrayList in eine LinkedHashSet umwandeln, da nur eine putStringSet-Methode besteht.
Wenn ich die LinkedHashSet wieder auslese und sie in eine ArrayList umwandle, ist sie in einer anderen Reihenfolge als ich sie gespeichert habe.

Speichern:
public void save(ArrayList<String> list) {
LinkedHashSet<String> hashSet = new LinkedHashSet<String>(list);
Editor editor = preferences.edit();
editor.putStringSet("list", hashSet);
editor.commit();
}

Lesen:
public void read() {
try {
contentList = new ArrayList<String>(preferences.getStringSet( "list", null));
}
catch (Exception e) {
e.printStackTrace();
}
}


Beispiel:
Eingabereihenfolge: 3,2,0,1
Ausgabereihenfolge: 3,2,1,0



Jemand eine Idee?
 
Zuletzt bearbeitet:
Liegt vermutlich daran, dass du beim Auslesen nur ein Set zurück bekommst.
Dessen Sortierung in dem Fall halt anders ist.

Ich bezweifle das du ein LinkedHashSet zurück bekommst.
Und viele Sets geben per Definition keine Garantie darüber, in welcher Reihenfolge die Elemente vorliegen.

Ich sehe erstmal auf Anhieb keine Möglichkeit irgendwas mit einer definierten Reihenfolge in den Preferences zu speichern.
 
Da muss man sich schon selbst um die Ordnung kümmern. also irgendwas in der folgenden Art machen:

Code:
void saveArray( String key, ArrayList<String> value ) {
  Editor editor = preferences.edit();
  int counter = 0;
  for( String v: value ) {
    editor.putString( key+"."+counter, v );
    counter++;
  }
  editor.putInt( key+".length", counter );
  editor.save();
}

// loadArray ist übungsaufgabe :D

Aber ehrlich gesagt, ich würde sowas nicht mehr in den Preferences speichern, sondern selber eigene Save-Dateien anlegen.
 
Du könntest die Position zusammen mit dem String speichern, z.B.
0#AAA
1#BBB
2#CCC
usw. und beim Einlesen eine HashMap nehmen und als Key die Position benutzen. Aber irgendwie ist das auch umständlich.

Schreib ne eigenen Datei, dann sollte die Reihenfolge auch stimmen, hast es ja dann selbst in der Hand. Oder benutz die SQLite, falls du sie schon für andere Sachen im Programm benutzt.
 
Danke, hab es jetzt alles auf SQLite umgestellt...
 
Mit Sicherheit der schönere Weg =)

lg. Dagobert
 
Zurück
Oben Unten