2017-05-21 26 views
0

我只是想知道是否有方法在Android上异步排序RealmListRealmList排序异步?

说我有叫diaryEntry一种境界对象包含EntryRealmList一个对象:

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

如果我要排序的RealmList我简单地调用排序和多数民众赞成它,它工作正常。

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

上面的代码然而在一个Fragment's onResumeFragment()方法当片段变得可见,其被调用执行(it's我介绍了一个自定义的生命周期方法)在ViewPager。所以很显然,如果我可以在后台对数据进行排序,并且片段变得可见时,将结果绑定到视图上会很好。

于是我想出了下面的第二方案:

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线程上的条目,但有含有(以平均10-15 Entry对象)中的所有相应Entry对象RealmList的即时访问。 或者第二种方法,它必须首先找到所有对应的Entry对象dateId,但是所有这一切都是异步而不会阻塞UI线程?

注:在平均有每一个独特的dateId约10-15 Entry对象,因此,如果一个普通用户使用我的应用程序为2年,并增加了约15项,每天将有大约11000 Entry对象数据库。这显然是一个相当高的假设,因为没有用户每天都会添加条目,甚至没有那么多。

+0

'.findAllSortedAsync(“time”);'这是异步排序的。当初始异步评估完成时(以及将来的任何更改),将调用添加到其中的'RealmChangeListener'。 – EpicPandaForce

+0

所以第二种方法会更好,即使首先需要为Entry对象查询数据库?但是我猜搜索速度非常快,而且是异步搜索(最少的搜索时间无关紧要),所以这是更好的方法,我明白了吗? – Elias

+0

我知道这是脱离主题,但有没有一种方法来使用RealmRecyclerViewAdapter动画RecyclerView项目? – Elias

回答

1

你可以这样做:

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

这将创建一个基于项目列表中的查询,查询会在后台线程中执行。

+0

谢谢,我已经测试过了,它也能正常工作。现在我需要确定哪种方法更清晰的数据模型明智。存储条目的“RealmList”或简单的整数ID,以便稍后查找由查询组成的条目。无论如何非常感谢,非常好的支持 - Realm <3 – Elias