Я новичок, когда дело доходит до в основном всех форм хранения, кроме SharedPreferences и некоторого SQLite. Я сделал несколько поисков и обнаружил, что JSON + GSON - это быстрый способ разбора объектов и их полей в сохраняемые строки.Gson IllegalStateException
Так, в моей игре, у меня есть Player
объекта, который имеет поле, которые также мои собственные классы:
public class Player {
private int something_game_related = 1;
private Skill equipped_skill;
private Item equipped_weapon;
public Player() {}
}
Я подозреваю, что эти классы проблемы, потому что, когда я пытаюсь запустить простой метод сохранения :
private class ItemSerializer implements JsonSerializer<Item> {
public JsonElement serialize(Item src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src.toString());
}
}
private class SkillSerializer implements JsonSerializer<Skill> {
public JsonElement serialize(Skill src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src.toString());
}
}
public void doSave() {
GsonBuilder gson = new GsonBuilder();
//Both custom classes have zero-arg constructors so we don't need to register those
gson.registerTypeAdapter(Item.class, new ItemSerializer());
gson.registerTypeAdapter(Skill.class, new SkillSerializer());
Gson g = gson.create();
String mPlayer = "";
Type player = new TypeToken<Player>(){}.getType();
try{
mPlayer = g.toJson(GameView.mPlayer, player);
}
catch (Exception e) {e.printStackTrace();}
}
Я получаю это исключение: java.lang.IllegalStateException: How can the type variable not be present in the class declaration!
Мой вопрос:
Как заставить эти пользовательские сериализаторы работать? Как я уже сказал, я нуб .. но это выглядит как я сделал это правильно ..
Я только что обнаружил, что если попытаюсь запустить 'try {mPlayer = g.toJson (new Player())}, он работает нормально! Я думаю, что это как-то связано с тем, что объект, который я передаю, является «статическим». Разрешены ли статические объекты? – Snailer