2016-04-09 4 views
0

У меня есть класс GamePresenter с коллекцией игроков:Gson: сериализации объект со списком других объектов

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 есть несколько полей и карта еще объектов:

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- он работает.

ответ

1

Вы не показываете всю свою информацию, например, что такое TestPlayerInit? Независимо от того, как вы создали проблему с тем, что вы:

Класс BoxPlayer имеет ссылки на PlayerData в public Map<Integer,PlayerData> IntToPlayerData;

Игрок данных имеет переменные типа BoxPlayer

В сводке, когда JSON происходит сериализация, вы попадаете в циклический цикл ссылок, бесконечный цикл, приводящий к сбою JVM.

Вам необходимо оценить структуру ваших объектов. Не должно быть случая, когда класс A ссылается на B, который ссылается на A снова.

+0

Я обновляю вопрос: добавьте класс игрока. –

+0

p.s. он не работает, если класс BoxPlayer не содержит Map . Но ArrayList сериализует работы. –

Смежные вопросы