我只是想知道是否有办法在Android上异步排序RealmList
。
假设我有一个名为diaryEntry
的领域对象,其中包含RealmList
个Entry
个对象:
RealmList<Entry> entries;
public RealmList<Entry> getEntries() { return entries; }
如果我想对RealmList进行排序,我只需调用sort就可以了,它可以正常工作。
RealmResults<Entry> sortedEntries = diaryEntry.getEntries().sort("time");
mvpView.bindAndShowEntryList(sortedEntries);
然而,上面的代码是在Fragment的onResumeFragment()
方法中执行的,当片段在中变为可见(这是我引入的自定义生命周期方法)时会被调用ViewPager 即可。所以很明显,如果我可以在后台对数据进行排序以及片段何时可见,只需将结果绑定到视图即可。
所以我想出了下面的第二个解决方案:
entries = realm.where(Entry.class)
.equalTo("dateId", dateId)
.findAllSortedAsync("time");
注意:dateId
是一个整数,对于Fragment
中的每个ViewPager
都是唯一ID 。
这样我就不得不在Entry.class中添加一个新的索引整数字段dateId。
public class Entry extends RealmObject {
// Other fields ...
@Index
private int dateId;
我的问题:有没有办法异步排序RealmList
?
如果没有,哪种方法可能更好?第一个 排序 UI主题上的条目但可以即时访问包含所有相应{{1}的RealmList
对象(平均10-15个Entry对象)。
或者第二种方法,必须首先通过Entry
找到所有相应的Entry
对象,但是在不阻止UI线程的情况下完成所有 async ?
注意:对于每个唯一的dateId
,平均有大约10-15个Entry
个对象,因此如果普通用户使用我的应用程序2年并添加了每天有15个条目,数据库中将有大约11000个dateId
个对象。这显然是一个相当高的假设,因为没有用户会每天添加条目,甚至没有那么多。
答案 0 :(得分:1)
你可以这样做:
RealmResults<Entry> sortedEntries = diaryEntry.getEntries()
.where()
.findAllSortedAsync("time");
这将根据您的条目列表创建一个查询,查询将在后台线程中执行。