2013-02-12 17 views
5

Tôi muốn lưu trữ một đối tượng tùy chỉnh (hãy gọi nó là MyObject) vĩnh viễn để nếu nó bị xóa khỏi bộ nhớ, tôi có thể tải lại nó trong phương thức onResume() hoạt động của tôi khi ứng dụng bắt đầu lại.Làm cách nào để lưu trữ vĩnh viễn đối tượng tùy chỉnh có thể đặt hàng?

Tôi có thể làm như thế nào? SharedPreferences dường như không có phương pháp để lưu trữ các đối tượng có thể đặt hàng.

Trả lời

21

Nếu bạn cần lưu trữ nó trong SharedPreferences, bạn có thể phân tích đối tượng của bạn thành chuỗi json và lưu chuỗi.

private Context context; 
private MyObject savedObject; 
private static final String PREF_MY_OBJECT = "pref_my_object"; 
private SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
private Gson gson = new GsonBuilder().create(); 

public MyObject getMyObject() { 
    if (savedObject == null) { 
     String savedValue = prefs.getString(PREF_MY_OBJECT, ""); 
     if (savedValue.equals("")) { 
      savedObject = null; 
     } else { 
      savedObject = gson.fromJson(savedValue, MyObject.class); 
     } 
    } 

    return savedObject; 
} 

public void setMyObject(MyObject obj) { 
    if (obj == null) { 
     prefs.edit().putString(PREF_MY_OBJECT, "").commit(); 
    } else { 
     prefs.edit().putString(PREF_MY_OBJECT, gson.toJson(obj)).commit(); 
    } 
    savedObject = obj; 
} 

class MyObject { 

} 
2

Bạn có thể viết Bundle làm bưu kiện vào đĩa, sau đó nhận Parcel sau và sử dụng phương thức Parcel.readBundle() để lấy lại Bundle.

+3

Làm thế nào để bạn viết gói thành bưu kiện vào đĩa? –