Realm Android - 我该如何将 RealmResults 转换为对象数组?

16

我有一个物体

public class ArticleList extends RealmObject {

@PrimaryKey
private String id;
private String title;
private String subtitle;
private String image;
private String category;

}

我想要做的是从Realm获取结果并将结果转换为ArticleList[]

我使用以下方式进行获取:

RealmResults<ArticleList> results = realm.where(ArticleList.class).equalTo("category", "CategoryName").findAll();

我接下来需要做什么才能获得对象数组?


3
为什么不直接使用RealmResults?为何需要另一个数据结构来保存数据? - pskink
你应该在listviews中使用RealmBaseAdapter - EpicPandaForce
4个回答

28

最简单转换为Java ArrayList 的方法:

    ArrayList<People> list = new ArrayList(mRealm.where(People.class).findAll());

如果在后台线程中删除了People中的元素会怎么样? - EpicPandaForce
开发人员必须同时在 Realm 事务中删除该对象。 - Farhan
是的,在领域更改侦听器中重建数组。 - EpicPandaForce
你不能在线程之间传递这个 list - Praveena

23
List<ArticleList> unmanagedList = realm.copyFromRealm(results);

会做的。


12

RealmResults有一个toArray()方法,还有一个toArray(T[] contents)方法(注意RealmResults继承链)。您可以按照以下方式使用它们:

ArticleList[] resultArray = (ArticleList[]) results.toArray();

或者

ArticleList[] resultArray = results.toArray(new ArticleList[results.size()]);

理想情况下,你应该使用RealmResults代替。这将使你能够获得数据的"自动"更新,以及所有List的便利功能。

编译器报错:类型不兼容 :( https://s.mail.ru/oRPdhBqpwCrp/img-2016-03-05-15-14-37.png - Alexey K
@AlexeyK Adam S 是正确的:如果你需要它用于 ListView 的适配器,请使用 RealmResults,找到(或编写)一个接受 RealmResults 的适配器,就像 android.widget.CursorAdapter 接受 Cursor 一样。 - pskink
我更新了如何使用toArray()方法的示例。再次强调 - 这可能是一个坏主意 - Adam S

2

不要试图将其转换为数组,而应该从https://github.com/realm/realm-android-adapters继承抽象的RealmBaseAdapter类来保持结果同步。

Realm提供这些类作为示例,以创建自动更新的RecyclerView或ListView列表。


1
@CarlSmith 不是的,他们只是删除了已弃用的构造函数,RealmBaseAdapter 仍然在这里 https://github.com/realm/realm-android-adapters/blob/master/adapters/src/main/java/io/realm/RealmBaseAdapter.java - EpicPandaForce
非常抱歉我的错误,@EpicPandaForce。我已经删除了评论。 - Carl Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接