我在Android上使用Realm,我有一个RealmObject,我需要序列化为JSON,我正在使用GSON。该模型看起来像:
@RealmClass
public class User implements RealmModel {
private String name;
private RealmList<RealmString> memberships;
... (getters and setters omitted)
}
当我从服务器上读取它时(使用Retrofit和GSON),我将其写入数据库,如:
realm.executeTransaction(realm1 -> realm1.copyToRealmOrUpdate(user));
如果我然后尝试序列化对象,它可以工作:
String userAsJson = getRealmSafeGson().toJson(test);
Realm安全GSON几乎是文档的样板。我把它放在这里以避免噪音:https://gist.github.com/stephenroberts82/0e2cc93fa8983dd86b1f178b7c2c1a88
但是,下次我从数据库中读取模型时,所有值都为null。这很好,这是记录的懒惰评估。所以我尝试复制,所以GSON可以使用它:
User copied = realm.copyFromRealm(user);
String userAsJson = getRealmSafeGson().toJson(copied);
但这次它不起作用。它只是因为内存不足而挂起并最终崩溃。
答案 0 :(得分:3)
这很可能是因为您的User
包含了一个周期性参考,而copyFromRealm()
的默认参数表明它应该尝试尽可能长时间地复制它。
尝试类似copyFromRealm(user, 1)
或copyFromRealm(user, 2)
的内容。
答案 1 :(得分:2)
以下代码适用于我:
try (Realm realm = Realm.getDefaultInstance()) {
RealmResults<User> realmResult=realm.where(User.class).findAll();
String reslutAsString=new Gson().toJson(realm.copyFromRealm(realmResult));
}