2017-06-18 69 views
1

我使用串行有2個表,Culinary和延伸RealmObject和器具SerializableCulinaryMenuCulinary的hasManyCulinaryMenu,如顯示下面的代碼:使用新GSON()。的toJSON(對象)的無限循環

public class Culinary extends RealmObject implements Serializable { 
    @PrimaryKey 
    private Integer id; 
    private String name; 
    private RealmList<CulinaryMenu> menus; 
} 

public class CulinaryMenu extends RealmObject { 
    @PrimaryKey 
    private Integer id; 
    private String name; 
} 

我想CulinaryMenu對象轉換Gson string使用下面的代碼,但沒有奏效。它會耗盡內存並沒有完成(CulinaryMenu有3個對象):

culinary = realm.where(Culinary.class).equalTo(AppConst.COLUMN_ID, 1).findFirst(); 
for (CulinaryMenu menu : culinary.getMenus()) {   
    System.out.println("CULINARY MENU: " + new Gson().toJson(menu));  
} 

如果我說出我使用的對象類,它返回null:

culinary = realm.where(Culinary.class).equalTo(AppConst.COLUMN_ID, 1).findFirst(); 
for (CulinaryMenu menu : culinary.getMenus()) {   
    System.out.println("CULINARY MENU: " + new Gson().toJson(menu, CulinaryMenu.class));  
} 

什麼問題?請賜教。

回答

0

你可以嘗試這樣的

@Expose private RealmList<CulinaryMenu> menus; 

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 
+0

我試過了,但沒有工作。 – tonny

2

解決。必須使用realm.copyFromRealm(class)。我的工作代碼:

culinary = realm.where(Culinary.class).equalTo(AppConst.COLUMN_ID, 1).findFirst(); 
List<CulinaryMenu> menus = realm.copyFromRealm(culinary.getMenus()); 
for (CulinaryMenu menu : menus) {   
    System.out.println("CULINARY MENU: " + new Gson().toJson(menu));  
} 

我懷疑的問題是,當我剛用culinary = realm.where()..,仍然有模型(烹飪有CulinaryMenu兒童之間的境界關係,即返回境界數據對象; CulinaryMenu有烹飪作爲父親或母親。數據由gson使用,導致無限循環)。因此,我們切割領域的'東西',並用命令純粹使用對象:realm.copyFromRealm()

+0

是的,通過GSON發送管理對象的推薦方法是首先將它們分開 – EpicPandaForce