java - RealmList 排序异步?

标签 java android realm

我只是想知道是否有一种方法可以在 Android 上对 RealmList 进行异步排序。

假设我有一个名为 diaryEntry 的 Realm 对象,其中包含 Entry 对象的 RealmList:

RealmList<Entry> entries;
public RealmList<Entry> getEntries() { return entries; }

如果我想对 RealmList 进行排序,我只需调用 sort 就可以了,它工作正常。

RealmResults<Entry> sortedEntries = diaryEntry.getEntries().sort("time");
mvpView.bindAndShowEntryList(sortedEntries);

上面的代码是在 Fragment 的 onResumeFragment() 方法中执行的,当 Fragment 可见时调用该方法(这是我介绍的自定义生命周期方法)在 ViewPager 中。所以很明显,如果我可以在后台对数据进行排序,并且当 fragment 变得可见时,只需将结果绑定(bind)到 View ,那就太好了。

所以我想到了下面的第二种解决方案:

entries = realm.where(Entry.class)
                .equalTo("dateId", dateId)
                .findAllSortedAsync("time");

注意:dateId 是一个整数,是 ViewPager 中每个 Fragment唯一 ID。 这样我就必须向 Entry.class 添加一个新的索引整数字段 dateId。

public class Entry extends RealmObject {
    // Other fields ...
    @Index
    private int dateId;

我的问题:有没有办法异步排序 RealmList? 如果不是,哪种方法可能更好?第一个排序UI 线程 上的条目,但可以即时访问包含所有相应条目的RealmList Entry 对象(平均 10-15 个 Entry 对象)。 或者第二种方法,它必须首先通过它们的 dateId 找到所有相应的 Entry 对象,但是在不阻塞 UI 线程的情况下完成所有这些async

注意:每个唯一的 dateId 平均有大约 10-15 个 Entry 对象,所以如果普通用户正在使用我的应用2 年,每天添加大约 15 个条目,数据库中将有大约 11000 个 Entry 对象。这显然是一个相当高的假设,因为没有用户会每天添加条目,甚至不会添加那么多。

最佳答案

你可以这样做:

RealmResults<Entry> sortedEntries = diaryEntry.getEntries()
            .where()
            .findAllSortedAsync("time");

这将根据您的条目列表创建一个查询,该查询将在后台线程中执行。

关于java - RealmList 排序异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098582/

相关文章:

java - 通过类向面板添加组件?

java - 如何传递对当前 Activity 的引用

android - 将图库中的图像路径保存到 Room Database 并将其显示在 Recycler 列表中

java - Android studio TextView 值不会更新

ios - Realm 生成模型

macos - 如何成功将 RealmSwift 添加到 Xcode?

java - byte[] 数组在输入 SQLiteDatabase 之前和之后有所不同

java - WEKA 无法确定结构为 arff

iOS Realm : How do i downcast to Object

java - 如何查找网络元素