0

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!

私の質問は..

これらのカスタムシリアライザーを機能させるにはどうすればよいですか? 私が言ったように、私は初心者です..しかし、私はそれを正しくやったようです..

4

1 に答える 1

0

ドキュメントでは、静的フィールドは除外されていると書かれています:http ://sites.google.com/site/gson/gson-user-guide#TOC-Exclusive-Fields-From-Serialization

GSONビルダーで「excludeFieldsWithModifier(Modifier.STATIC)」のようなことを実行して、それらを含めることができます。

于 2011-02-11T09:55:30.087 に答える