gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:56 25 4
gpt4 key购买 nike

我需要将我的模型对象之一(使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com