【问题标题】:Gson IllegalStateExceptionGson IllegalStateException
【发布时间】:2010-11-20 03:35:40
【问题描述】:

除了 SharedPreferences 和一些 SQLite 之外,基本上所有形式的存储我都是菜鸟。我做了一些搜索,发现 JSON+GSON 是一种将对象及其字段解析为可存储字符串的快速方法。

所以,在我的游戏中,我有一个 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() ) },它可以正常工作!我认为这与我传递的对象 static 有关。是否允许使用静态对象?

标签: android json gson


【解决方案1】:

在文档中它说(在细则中)排除了静态字段:http://sites.google.com/site/gson/gson-user-guide#TOC-Excluding-Fields-From-Serialization

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

【讨论】:

    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-16
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多