2010-11-20 5 views
0

Я новичок, когда дело доходит до в основном всех форм хранения, кроме 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!

Мой вопрос:

Как заставить эти пользовательские сериализаторы работать? Как я уже сказал, я нуб .. но это выглядит как я сделал это правильно ..

+0

Я только что обнаружил, что если попытаюсь запустить 'try {mPlayer = g.toJson (new Player())}, он работает нормально! Я думаю, что это как-то связано с тем, что объект, который я передаю, является «статическим». Разрешены ли статические объекты? – Snailer

ответ