Özel bir Java nesnesini serileştirmek istiyorum, böylece SharedPreferences
'u saklamak ve başka bir Etkinlikte geri almak için kullanabilirim. Sürekli depolama alanına ihtiyacım yok, SharedPreferences
, uygulama kapalıyken bunları siliyorum. Şu anda GSON kullanıyorum, ancak Android'in SparseArray türüyle iyi çalışmıyor gibi görünüyor.Bir SparseArray Dizisi <T> GSON
My nesneleri:
public class PartProfile {
private int gameId;
// Some more primitives
private SparseArray<Part> installedParts = new SparseArray<Part>();
// ...
}
public class Part {
private String partName;
// More primitives
}
Seri:
Type genericType = new TypeToken<PartProfile>() {}.getType();
String serializedProfile = Helpers.serializeWithJSON(installedParts, genericType);
preferences.edit().putString("Parts", serializedProfile).commit();
serializeWithJSON():
public static String serializeWithJSON(Object o, Type genericType) {
Gson gson = new Gson();
return gson.toJson(o, genericType);
}
Seri kaldırma:
Type genericType = new TypeToken<PartProfile>() {}.getType();
PartProfile parts = gson.fromJson(preferences.getString("Parts", "PARTS_ERROR"), genericType);
SparseArray<Part> retreivedParts = parts.getInstalledParts();
int key;
for (int i = 0; i < retreivedParts.size(); i++) {
key = retreivedParts.keyAt(i);
// Exception here:
Part part = retreivedParts.get(key);
// ...
}
İstisna: GSON benim nesneye bir LinkedTreeMap
döküm istiyor neden
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.mypackage.objects.Part
benim tüm programda birini kullanmak asla anlamıyorum. SparseArray<Part>
'a geçmeden önce bir HashMap<Integer,Part>
kullanıyordum ve bununla ilgili hiçbir sorun yaşamadım. SparseArrays Gson tarafından desteklenmiyor mu, yoksa benim tarafımda bir hata var mı?
Düzenleme: Görünüşe göre, SparseArray öğesi düzgün bir şekilde seri hale getirilir, ancak içindeki nesneler değil. LinkedTreeMaps
yerine, bunlar Part
türünde olmalıdır.
'SharedPreferences' oturumları boyunca devam eder (uygulama öldürülse bile). [Paylaşılan Tercihleri Kullanarak] 'ı okuyun (http://developer.android.com/guide/topics/data/data-storage.html # pref) – Rajesh
Evet, ancak el ile clear() ile siliyorum. Sadece bunların devam etmesinin gerekli olmadığını belirtmek istedim. – Lennart
'SharedPreferences', etkinliklerin genelinde verileri paylaşmaya yönelik değildir. Daha fazla bilgi için lütfen http://stackoverflow.com/q/3549596/1321873 adresine bakın. – Rajesh