Nach API 11 wird SharedPreferences Editor
akzeptiert Sets
. Sie können Ihre Liste in eine HashSet
oder 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 ArrayList
und dann in / von speichern / lesen SharedPreferences
. Unten ist die Lösung:
BEARBEITEN:
Ok, unten ist die Lösung, um sie ArrayList
als serialisiertes Objekt zu speichern SharedPreferences
und 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 ObjectSerializer
Klasse aus dem Apache Pig-Projekt ObjectSerializer.java abrufen