【问题标题】:Gson:serialize object with list of another objectsGson:用另一个对象列表序列化对象
【发布时间】:2016-04-09 16:28:47
【问题描述】:

我有一个包含玩家集合的 GamePresenter 类:

public class GamePresenter extends MvpBasePresenter<IMainGameView> {

public ArrayList<BoxPlayer> BoxPlayersColl;

public GamePresenter()
{
    TestPlayerInit testPlayerInit=new  TestPlayerInit();
    BoxPlayersColl=testPlayerInit.BoxPlayersColl;


}
@Override
public String toString() {
    return "GamePresenter [data1=" + BoxPlayersColl + "]";
}

}

TestPlayerInit简单创建所有播放器,插入到BoxPlayerCollection中。

所以,每个 BoxPlayer 都有一些字段和另一个对象的 Map:

public class BoxPlayer {

public Player PlayerObj;

public Integer Id;
public String Description;
// getters,setters...

public Map<Integer,PlayerData> IntToPlayerData;

}

Player类:

 public  int Id;
 public String NickName;
 // getters setters

public Player(int id,String nickName)
{
    Id=id;
    NickName=nickName;
}

而 PlayerData 是简单的 POJO:

public class PlayerData{
public BoxPlayer Player1;   
public BoxPlayer Player2;

public VotedBoxPlayer(BoxPlayer player1, BoxPlayer player2)
{
    Player1=player1;
    Player2=player2;
}

}

所以,我想将它序列化并存储在 SharedPrederence 中。

我使用Gsonlib:

 public String serializeGamePresenter(GamePresenter gamePresenter)
{
    Gson gson=new Gson();
    String gamePresenterJSON= gson.toJson(_gamePresenter);
    return gamePresenterJSON;
}

但是,当我使用这种方法时——应用程序冻结,内存分配崩溃应用程序。

您能帮我吗,如何将此对象序列化为 JSON?

附:当我尝试序列化ArrayList BoxPlayerCol- 它可以工作。

【问题讨论】:

    标签: java json serialization android gson


    【解决方案1】:

    您没有显示所有信息,例如 TestPlayerInit 是什么? 无论如何,您已经制造了一个问题,因为您是:

    BoxPlayer 类在public Map&lt;Integer,PlayerData&gt; IntToPlayerData; 中引用了PlayerData

    玩家数据有BoxPlayer类型的变量

    总之,当json序列化发生时,你进入了一个循环引用循环,一个无限循环,导致JVM崩溃。

    您需要评估对象的结构。不应该出现类 A 引用 B 又引用 A 的情况。

    【讨论】:

    • 附注当 BoxPlayer 类不包含 Map 时,它不起作用。但是 ArrayList 序列化有效。
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多