2016-04-09 5 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にあります。

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; 
} 

ので、各BoxPlayerは、いくつかのフィールドと別のオブジェクトの地図を持っています

}

私はそれをシリアライズしてSharedPrederenceに保存したいと思います。

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

しかし、私はこのMETHOD-アプリケーションのフリーズを使用し、メモリ割り当てのクラッシュアプ​​リケーション:

私はGson LIBを使用しています。

このオブジェクトをJSONにシリアル化する方法を教えてください。

P.S.私がシリアル化しようとするとArrayList BoxPlayerColl-それが動作します。

答えて

1

あなたはTestPlayerInitのようなあなたの情報をすべて表示していませんか? にかかわらず、あなたはあなたがしているという事実と問題を作成しました:クラスBoxPlayerpublic Map<Integer,PlayerData> IntToPlayerData;

JSONプレイヤーデータは、概要ではタイプBoxPlayer

の変数を持っているにPlayerDataへの参照を持っている

シリアライゼーションが発生していると、循環参照ループ、つまり無限ループに陥り、JVMがクラッシュします。

オブジェクトの構造を評価する必要があります。クラスAが、Aを再び参照するBを参照するケースは存在しないはずです。

+0

質問を更新します。Playerクラスを追加します。 –

+0

p.s. BoxPlayerクラスにMap が含まれていない場合は機能しません。しかし、ArrayList はシリアル化されています。 –

関連する問題