После API 11 SharedPreferences Editor
принимает Sets
.Вы можете преобразовать свой Список в HashSet
или что-то подобное и сохранить его таким образом.Когда вы прочитаете его обратно, преобразуйте его в ArrayList
, отсортируйте его, если нужно, и все готово.
//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();
Вы также можете сериализовать ваш ArrayList
и затем сохранить /прочитайте это в / из SharedPreferences
.Ниже приведено решение:
РЕДАКТИРОВАТЬ:
Хорошо, ниже приведено решение для сохранения ArrayList
в качестве сериализованного объекта в SharedPreferences
и последующего чтения его из SharedPreferences.
Поскольку API поддерживает только сохранение и извлечение строк в / из SharedPreferences (после API 11, его проще), мы должны сериализовать и десериализовать объект ArrayList, который имеет список задач, в строку.
В методе addTask()
класса TaskManagerApplication мы должны получить экземпляр общего предпочтения и затем сохранить сериализованный ArrayList, используя метод putString()
:
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();
}
Аналогично, мы должны получитьсписок задач из предпочтения в методе onCreate()
:
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();
}
}
Вы можете получить ObjectSerializer
класс из проекта Apache Pig ObjectSerializer.java