Após a API 11, SharedPreferences Editor
aceite Sets
. Você pode converter sua lista em HashSet
algo semelhante e armazená-la assim. Quando você ler novamente, converta-o em um ArrayList
, classifique-o se necessário e pronto.
//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();
Você também pode serializar seu ArrayList
e salvar / ler de / para SharedPreferences
. Abaixo está a solução:
EDIT:
Ok, abaixo está a solução para salvar ArrayList
como objeto serializado SharedPreferences
e, em seguida, lê-lo em SharedPreferences.
Como a API suporta apenas o armazenamento e a recuperação de strings de / para SharedPreferences (após a API 11, sua mais simples), precisamos serializar e desserializar o objeto ArrayList que possui a lista de tarefas na string.
No addTask()
método da classe TaskManagerApplication, precisamos obter a instância da preferência compartilhada e, em seguida, armazenar o ArrayList serializado usando o 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();
}
Da mesma forma, temos que recuperar a lista de tarefas da preferência no 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();
}
}
Você pode obter ObjectSerializer
classe no projeto Object Apex Pig ObjectSerializer.java