Nếu bạn đang sử dụng một api (như mức 8), nơi bạn không thể sử dụng đặt/getStringSet(), thì đây là một giải pháp khả thi, nhưng đây là rất tốn kém và không linh hoạt nếu bạn muốn lưu trữ lớn hơn danh sách. Tôi có nghĩa là tạo ra một bản đồ như datastructure cho một cấu trúc đơn giản giống như mảng tạo ra một chi phí rất lớn, nếu preformance là quan trọng.
Để lưu nó:
public static void writeList(Context context, List<String> list, String prefix)
{
SharedPreferences prefs = context.getSharedPreferences("YourApp", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
int size = prefs.getInt(prefix+"_size", 0);
// clear the previous data if exists
for(int i=0; i<size; i++)
editor.remove(prefix+"_"+i);
// write the current list
for(int i=0; i<list.size(); i++)
editor.putString(prefix+"_"+i, list.get(i));
editor.putInt(prefix+"_size", list.size());
editor.commit();
}
Để lấy nó:
public static List<String> readList (Context context, String prefix)
{
SharedPreferences prefs = context.getSharedPreferences("YourApp", Context.MODE_PRIVATE);
int size = prefs.getInt(prefix+"_size", 0);
List<String> data = new ArrayList<String>(size);
for(int i=0; i<size; i++)
data.add(prefs.getString(prefix+"_"+i, null));
return data;
}
Và để thực sự sử dụng nó:
List<String> animals = new ArrayList<String>();
animals.add("cat");
animals.add("bear");
animals.add("dog");
writeList(someContext, animals, "animal");
Và để lấy nó:
List<String> animals = readList (someContext, "animal");
Nếu bạn không bị giới hạn sử dụng SharedPreferences, hãy cân nhắc sử dụng SQLiteDatabase!
Nguồn
2012-08-27 23:07:32
Cảm ơn đây là những gì tôi đã sử dụng, tôi chắc rằng các câu trả lời khác sẽ hoạt động quá – Peter
Tốt, sẽ dễ dàng hơn thay vì làm mọi thứ phức tạp với các tệp chia sẻ trong trường hợp của bạn. Chúc may mắn! – Ali
Mặc dù điều này sẽ hoạt động, sở thích được chia sẻ có đặc tính riêng biệt cho đến khi gỡ cài đặt ứng dụng, nhưng mặt khác nếu chúng tôi đang sử dụng bộ nhớ thẻ SD, chúng tôi sẽ phải xóa tệp một cách rõ ràng. –