Después de API 11 la SharedPreferences Editor
acepta Sets
. Puede convertir su Lista en HashSet
algo similar y almacenarla así. Cuando lo leas de nuevo, conviértelo en un ArrayList
, clasifícalo si es necesario y listo.
//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();
También puede serializar su ArrayList
y luego guardarlo / leerlo en / desde SharedPreferences
. A continuación se muestra la solución:
EDITAR:
Ok, a continuación se muestra la solución para guardar ArrayList
como objeto serializado enSharedPreferences
y luego leerlo desde SharedPreferences.
Debido a que API solo admite el almacenamiento y la recuperación de cadenas hacia / desde SharedPreferences (después de API 11, es más simple), tenemos que serializar y deserializar el objeto ArrayList que tiene la lista de tareas en cadena.
En el addTask()
método de la clase TaskManagerApplication, tenemos que obtener la instancia de la preferencia compartida y luego almacenar la ArrayList serializada usando el putString()
método:
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();
}
Del mismo modo, tenemos que recuperar la lista de tareas de la preferencia en el onCreate()
método:
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();
}
}
Puede obtener ObjectSerializer
clase del proyecto ObjectSerializer.java de Apache Pig .