RealmObject到JSON

时间:2017-01-25 11:48:33

标签: android json realm

我在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);

但这次它不起作用。它只是因为内存不足而挂起并最终崩溃。

2 个答案:

答案 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));
}