Nach API 11 wird SharedPreferences Editorakzeptiert Sets. Sie können Ihre Liste in eine HashSetoder etwas Ähnliches konvertieren und so speichern. Wenn Sie es zurückgelesen haben, konvertieren Sie es in ein ArrayList, sortieren Sie es bei Bedarf und Sie können loslegen.
//Retrieve the values
Set<String> set = myScores.getStringSet("key", null);
//Set the values
Set<String> set = new HashSet<String>();
set.addAll(listOfExistingScores);
scoreEditor.putStringSet("key", set);
scoreEditor.commit();
Sie können Ihre auch serialisieren ArrayListund dann in / von speichern / lesen SharedPreferences. Unten ist die Lösung:
BEARBEITEN:
Ok, unten ist die Lösung, um sie ArrayListals serialisiertes Objekt zu speichern SharedPreferencesund dann aus SharedPreferences zu lesen.
Da die API nur das Speichern und Abrufen von Zeichenfolgen in / aus SharedPreferences unterstützt (nach API 11 ist dies einfacher), müssen wir das ArrayList-Objekt mit der Liste der Aufgaben in Zeichenfolgen serialisieren und de-serialisieren.
In der addTask()Methode der TaskManagerApplication-Klasse müssen wir die Instanz der gemeinsam genutzten Voreinstellung abrufen und dann die serialisierte ArrayList mit der folgenden putString()Methode speichern :
public void addTask(Task t) {
if (null == currentTasks) {
currentTasks = new ArrayList<task>();
}
currentTasks.add(t);
// save the task list to preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
try {
editor.putString(TASKS, ObjectSerializer.serialize(currentTasks));
} catch (IOException e) {
e.printStackTrace();
}
editor.commit();
}
Ebenso müssen wir die Liste der Aufgaben aus der Voreinstellung in der onCreate()Methode abrufen :
public void onCreate() {
super.onCreate();
if (null == currentTasks) {
currentTasks = new ArrayList<task>();
}
// load tasks from preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
try {
currentTasks = (ArrayList<task>) ObjectSerializer.deserialize(prefs.getString(TASKS, ObjectSerializer.serialize(new ArrayList<task>())));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Sie können die ObjectSerializerKlasse aus dem Apache Pig-Projekt ObjectSerializer.java abrufen