我想序列化定製的Java對象,所以我可以用SharedPreferences
來存儲它在別的活動retreive它。我不需要持久性存儲,我的應用程序關閉時我擦拭它們。我目前正在使用GSON,但它似乎不適用於Android的SparseArray類型。序列化SparseArray <T>與GSON
我的對象:
public class PartProfile {
private int gameId;
// Some more primitives
private SparseArray<Part> installedParts = new SparseArray<Part>();
// ...
}
public class Part {
private String partName;
// More primitives
}
連載:
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);
}
反序列化:
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);
// ...
}
例外:
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.mypackage.objects.Part
我不明白爲什麼GSON希望蒙上了LinkedTreeMap
我的目標,我從來沒有使用一個在我的整個程序。在我切換到SparseArray<Part>
之前,我曾經有一個HashMap<Integer,Part>
,從來沒有問題。 Gson不支持SparseArrays,還是在我身邊有錯誤?
編輯:看來,SparseArray被內正確反序列化,而不是對象。這些應該是Part
而不是LinkedTreeMaps
。
'SharedPreferences'堅持跨會話(即使該應用程序被殺死)。閱讀[使用共享偏好](http://developer.android.com/guide/topics/data/data-storage。html#pref) – Rajesh
是的,但我用clear()手動擦除它們。我只想指出,堅持這些並不是必要的。 – Lennart
'SharedPreferences'不適用於跨活動共享數據。有關更多信息,請參閱http://stackoverflow.com/q/3549596/1321873。 – Rajesh