我想序列化一个自定义 Java 对象,这样我就可以使用SharedPreferences
它来存储它并在另一个 Activity 中检索它。我不需要持久存储,SharedPreferences
当我的应用程序关闭时我会擦除它们。我目前正在为此使用 GSON,但它似乎不适用于 Android 的 SparseArray 类型。
我的对象:
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();
序列化与JSON():
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 想将 a 投射LinkedTreeMap
到我的对象上,我从不在我的整个程序中使用一个。HashMap<Integer,Part>
在我切换到 之前,我曾经有一个SparseArray<Part>
,并且从来没有遇到过问题。Gson 不支持 SparseArrays,还是我这边有错误?
编辑:似乎 SparseArray 被正确反序列化,但不是里面的对象。而不是LinkedTreeMaps
,这些应该是类型Part
。