我有2个表使用序列号 Culinary
和 CulinaryMenu
扩展 RealmObject
,实现 Serializable
。 Culinary
hasMany CulinaryMenu
,如以下代码所示:
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 :(得分:3)
解决。必须使用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()..
时,返回仍然具有模型之间领域关系的领域数据对象(Culinary有CulinaryMenu作为孩子; CulinaryMenu有Culinary作为父级。这些数据由gson使用,产生无限循环)。所以我们切断了“物品”领域,只使用带有命令的纯对象: realm.copyFromRealm()
。
答案 1 :(得分:0)
你可以这样尝试
@Expose private RealmList<CulinaryMenu> menus;
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();