Après l'API 11, SharedPreferences Editor
acceptez Sets
. Vous pouvez convertir votre liste en un HashSet
ou quelque chose de similaire et le stocker comme ça. Lorsque vous le relisez, convertissez-le en un ArrayList
, triez-le si nécessaire et vous êtes prêt à partir.
//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();
Vous pouvez également sérialiser votre ArrayList
, puis l'enregistrer / le lire vers / depuis SharedPreferences
. Voici la solution:
EDIT:
Ok, ci-dessous est la solution pour enregistrer en ArrayList
tant qu'objet sérialisé SharedPreferences
, puis le lire à partir de SharedPreferences.
Étant donné que l'API prend uniquement en charge le stockage et la récupération de chaînes vers / depuis SharedPreferences (après l'API 11, c'est plus simple), nous devons sérialiser et dé-sérialiser l'objet ArrayList qui contient la liste des tâches en chaîne.
Dans la addTask()
méthode de la classe TaskManagerApplication, nous devons obtenir l'instance de la préférence partagée, puis stocker la liste de tableaux sérialisée à l'aide de la putString()
méthode:
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();
}
De même, nous devons récupérer la liste des tâches de la préférence dans la onCreate()
méthode:
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();
}
}
Vous pouvez obtenir une ObjectSerializer
classe à partir du projet Apache Pig ObjectSerializer.java