Setelah API 11 SharedPreferences Editor
menerima Sets
. Anda dapat mengubah Daftar Anda menjadi HashSet
sesuatu yang serupa dan menyimpannya seperti itu. Ketika Anda membacanya kembali, ubah menjadi ArrayList
, urutkan jika perlu dan Anda siap melakukannya.
//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();
Anda juga dapat membuat cerita bersambung dari Anda ArrayList
dan kemudian menyimpan / membacanya ke / dari SharedPreferences
. Di bawah ini solusinya:
EDIT:
Ok, di bawah ini adalah solusi untuk menyimpan ArrayList
objek serial SharedPreferences
dan kemudian membacanya dari SharedPreferences.
Karena API hanya mendukung penyimpanan dan pengambilan string ke / dari SharedPreferences (setelah API 11, lebih sederhana), kita harus membuat cerita bersambung dan menghilangkan urutan objek ArrayList yang memiliki daftar tugas menjadi string.
Dalam addTask()
metode kelas TaskManagerApplication, kita harus mendapatkan instance dari preferensi bersama dan kemudian menyimpan ArrayList serial menggunakan putString()
metode:
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();
}
Demikian pula kita harus mengambil daftar tugas dari preferensi dalam onCreate()
metode:
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();
}
}
Anda bisa mendapatkan ObjectSerializer
kelas dari proyek Apache Pig ObjectSerializer.java