我有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中。
我使用Gson
lib:
public String serializeGamePresenter(GamePresenter gamePresenter)
{
Gson gson=new Gson();
String gamePresenterJSON= gson.toJson(_gamePresenter);
return gamePresenterJSON;
}
但是,当我使用这个方法 - 应用程序冻结,内存分配崩溃应用程序。
你能帮助我,如何将这个对象序列化为JSON?
P.S。当我尝试序列化ArrayList
BoxPlayerColl时,它可以工作。
答案 0 :(得分:1)
您没有显示所有信息,例如什么是TestPlayerInit? 无论如何,您已经创建了一个问题:
班级BoxPlayer
在PlayerData
public Map<Integer,PlayerData> IntToPlayerData;
玩家数据包含BoxPlayer
总结一下,当json序列化发生时,你将进入一个循环引用循环,一个无限循环,导致JVM崩溃。
您需要评估对象的结构。不应该存在A类引用B再次引用A的情况。