Sau API 11, SharedPreferences Editor
chấp nhận Sets
. Bạn có thể chuyển đổi Danh sách của bạn thành một HashSet
hoặc một cái gì đó tương tự và lưu trữ nó như thế. Khi bạn đọc lại, hãy chuyển đổi nó thành một ArrayList
, sắp xếp nó nếu cần và bạn sẽ ổn.
//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();
Bạn cũng có thể tuần tự hóa ArrayList
và sau đó lưu / đọc nó đến / từ SharedPreferences
. Dưới đây là giải pháp:
EDIT:
Ok, bên dưới là giải pháp lưu ArrayList
dưới dạng đối tượng được tuần tự hóa SharedPreferences
và sau đó đọc nó từ SharedPreferences.
Vì API chỉ hỗ trợ lưu trữ và truy xuất chuỗi đến / từ SharedPreferences (sau API 11, đơn giản hơn), chúng tôi phải tuần tự hóa và hủy tuần tự hóa đối tượng ArrayList có danh sách các tác vụ thành chuỗi.
Trong addTask()
phương thức của lớp TaskManagerApplication, chúng ta phải lấy thể hiện của tùy chọn chia sẻ và sau đó lưu trữ ArrayList được tuần tự hóa bằng putString()
phương thức:
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();
}
Tương tự, chúng ta phải lấy danh sách các tác vụ từ tùy chọn trong onCreate()
phương thức:
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();
}
}
Bạn có thể nhận ObjectSerializer
lớp từ dự án Apache Pig ObjectSerializer.java