2013-02-12 30 views
5

Özel bir nesneyi (MyObject olarak adlandırın) kalıcı olarak saklamak istiyorum; böylece bellekten silinirse, uygulama yeniden başladığında, onResume() yöntemindeki etkinliğimde/parçamda bunu yeniden yükleyebilirim.Parcelable özel nesneyi kalıcı olarak nasıl depolarım?

Bunu nasıl yapabilirim? SharedPreferences, parcelable nesneleri depolamak için bir yönteme sahip görünmüyor.

cevap

21

PaylaşılanÖzellikler içinde depolamanız gerekiyorsa, nesneyi bir json dizesine ayrıştırabilir ve dizeyi saklayabilirsiniz.

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

yazabilir senin Bundle diske bir parsel olarak, daha sonra Parcel almak ve Bundle geri almak için Parcel.readBundle() yöntemini kullanın.

+3

Paketi diske nasıl bir paket olarak yazıyorsunuz? –

İlgili konular