2013-02-12 2 views
5

Я хочу сохранить пользовательский объект (назовем его MyObject) навсегда, так что если он будет удален из памяти, я могу перезагрузить его в моем методе activity/fragment onResume(), когда приложение запустится снова.Как сохранить постоянный заказный объект?

Как я могу это сделать? SharedPreferences, похоже, не имеет метода для хранения допустимых объектов.

ответ

21

Если вам нужно сохранить его в SharedPreferences, вы можете проанализировать свой объект на строку json и сохранить строку.

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

Вы можете написать свой Bundle как посылку на диск, а затем получить Parcel позже и использовать метод Parcel.readBundle(), чтобы получить Bundle обратно.

+3

Как вы пишете пакет в виде посылки на диск? –

Смежные вопросы