如何创建包含RealmList的新RealmObject

时间:2015-10-15 22:10:20

标签: android realm

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

首先,我的代码是qplot(data = di, x = carat, y = price, col = cut) 而不是ggplot。 (我new RealmPoll()得到的realm.createObject(RealmPoll.class)就像this question所以我解决了这个问题。但我找不到复制RealmList的方法。

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

  

只有Realm才能创建托管的RealmLists。管理RealmLists将   每当底层Realm出现时自动更新内容   已更新,只能使用RealmObject的getter进行访问。

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

如果它包含列表,是否有可能将对象(如下面的RetrofitPoll)转换为领域对象(如下面的RealmPoll)?

一个说明我问题的功能:

NullPointerException

RetrofitPoll.java

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

RealmPoll.java

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

1 个答案:

答案 0 :(得分:10)

应该可以执行以下操作

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()创建非托管列表,但这可能在文档中更清晰。