gpt4 book ai didi

java - Gson:使用另一个对象的列表序列化对象

转载 作者:行者123 更新时间:2023-12-01 10:05:24 26 4
gpt4 key购买 nike

我有一个包含玩家集合的 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简单创建所有Player,插入到BoxPlayerCollection中。

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

public class BoxPlayer {

public Player PlayerObj;

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

public Map<Integer,PlayerData> IntToPlayerData;

}

玩家类:

 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 中。

我使用Gson lib:

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

但是,当我使用此方法时 - 应用程序卡住,内存分配崩溃应用程序。

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

附注当我尝试序列化 ArrayList BoxPlayerColl - 它有效。

最佳答案

您没有显示所有信息,例如 TestPlayerInit 是什么?不管怎样,你已经造成了一个问题,因为你是:

类(class)BoxPlayer引用PlayerDatapublic Map<Integer,PlayerData> IntToPlayerData;

玩家数据具有 BoxPlayer 类型的变量

总而言之,当 json 序列化发生时,您将进入循环引用循环,这是一个无限循环,导致 JVM 崩溃。

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

关于java - Gson:使用另一个对象的列表序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36519595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com