代码之家  ›  专栏  ›  技术社区  ›  Snailer

Gson非法状态例外

  •  0
  • Snailer  · 技术社区  · 15 年前

    基本上我是个笨蛋 全部的 除了SharedReference和一些SQLite之外的存储形式。我做了一些搜索,发现JSON+GSON是一种将对象及其字段解析为可存储字符串的快速方法。

    所以,在我的游戏中,我有一个 Player 对象,其字段也是我自己的类:

    public class Player {
        private int something_game_related = 1;
        private Skill equipped_skill;
        private Item equipped_weapon;
    
        public Player () {}
    }
    

    我怀疑这些类是问题所在,因为当我尝试运行一个简单的save方法时:

    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!

    如何让这些自定义序列化程序工作?就像我说的,我是个笨蛋。。但是它 看 好像我做对了。。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Mr Speaker    15 年前

    在文档中,它表示(类似于精细打印)静态字段被排除在外: http://sites.google.com/site/gson/gson-user-guide#TOC-Excluding-Fields-From-Serialization

    您可以在GSON构建器中执行类似“excludeFieldsWithModifier(Modifier.STATIC)”的操作来包含它们。