android - 如何创建一个包含 RealmList 的新 RealmObject

标签 android realm

我需要将我的模型对象之一(使用 Retrofit 从 Json 自动填充)转换为 Realm 对象。

起初,我的代码是 new RealmPoll() 而不是 realm.createObject(RealmPoll.class)。 (我得到了 NullPointerException 就像 this question )所以我解决了这个问题。但是我找不到复制 RealmList 的方法。

我在 official Realm website tutorial 中找不到任何使用 RealmLists 创建 RealmObjects 的示例和 docs

Only Realm can create managed RealmLists. Managed RealmLists will automatically update the content whenever the underlying Realm is updated, and can only be accessed using the getter of a RealmObject.

这让我相信这是不可能的?但这是一项非常简单的任务。我不知道如何解释文档的含义。

如果一个对象(例如下面的 RetrofitPoll)包含一个列表,是否有任何方法可以将它转换为一个 Realm 对象(例如下面的 RealmPoll)?

一个函数可以说明我的问题:

private RealmPoll convertRetrofitPollToRealmPoll(Realm realm, RetrofitPoll retrofitPoll)
{
    RealmPoll realmPoll = realm.createObject(RealmPoll.class);  //<----- fixed, used to be "new RealmPoll()".

    //Convert List<Answer>
    RealmList<RealmAnswer> realmAnswers = new RealmList<RealmAnswer>();  //<----- How to do same thing here?
    for(RetrofitAnswer retrofitAnswer : retrofitPoll.getAnswers())
    {
         realmAnswers.add(convertRetrofitAnswerToRealmAnswer(retrofitAnswer));
    }
    realmPoll.setAnswers(realmAnswers);
}

RetrofitPoll.java

public class RetrofitPoll
{
    private List<Answer> answers;
    private String id;
    private Date startDate;
    private String title;
    private Topic topic;
}

RealmPoll.java

public class Poll extends RealmObject
{
    private RealmList<Answer> answers;
    private String id;
    private Date startDate;
    private String title;
    private Topic topic;
}

最佳答案

应该可以做到以下几点

ObjectWithList obj = new ObjectWithList();
RealmList<Foo> list = new RealmList();
list.add(new Foo());
obj.setList(list);

realm.beginTransaction();
realm.copyToRealm(obj); // This will do a deep copy of everything
realm.commitTransaction();

如果您正在使用 Retrofit 创建您的整个对象图,您应该能够仅使用一个一行将所有内容复制到 Realm 中。如果不是,那就是一个错误。

请注意,这也在文档中:

 * Non-managed RealmLists can be created by the user and can contain both managed and non-managed
 * RealmObjects. This is useful when dealing with JSON deserializers like GSON or other
 * frameworks that inject values into a class. Non-managed elements in this list can be added to a
 * Realm using the {@link Realm#copyToRealm(Iterable)} method.

非托管列表是通过 new RealmList() 创建的,但这在文档中可能会更清楚。

关于android - 如何创建一个包含 RealmList 的新 RealmObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159364/

相关文章:

java - 膨胀类 android.support.v7.widget.CardView 时出错

java - 安卓工作室;布局;设计 View ;

java - 软件设计: one object available from all classes?

java - 如何在大型(Android)项目中舒适地工作?

c# - Realm .NET - 如何复制/分离对象

ios - swift Realm::In CorrectThreadException:从错误的线程访问 Realm

android - recyclerview 页脚点击加载图片

java - 异步发送交易 |无法解析方法 'executeTransactionAsync'

ios - Realm Swift - 复制现有的嵌套对象

c++ - 如何将 BUCK 构建与具有多个同名文件的 pod 一起使用?