Сериализация SparseArray <T> с помощью GSON
Я хочу сериализовать пользовательский объект Java, чтобы я мог использоватьSharedPreferences
сохранить его и получить в другой деятельности. Я нет требуется постоянное хранение,SharedPreferences
Я стираю их, когда мое приложение закрыто. Я'Я в настоящее время использую GSON для этого, но это некажется, хорошо работает с AndroidТип SparseArray.
Мои объекты:
public class PartProfile {
private int gameId;
// Some more primitives
private SparseArray installedParts = new SparseArray();
// ...
}
public class Part {
private String partName;
// More primitives
}
Сериализация:
Type genericType = new TypeToken() {}.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() {}.getType();
PartProfile parts = gson.fromJson(preferences.getString("Parts", "PARTS_ERROR"), genericType);
SparseArray 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
Я нене понимаю, почему Гсон хочет разыгратьLinkedTreeMap
к моему объекту, я никогда не использую один во всей моей программе. Я имел обыкновение иметьHashMap
прежде чем я переключился наSparseArray
и никогда не было проблем с этим. Разве SparseArrays не поддерживаются Gson, или на моей стороне ошибка?
Редактировать: Кажется, что SparseArray корректно десериализуется, но не объекты внутри. ВместоLinkedTreeMaps
, они должны быть типа.Part