2016-04-23 66 views
1

我是RxJava的新手,嘗試使用Realm Observable功能。Realm asObservable()只發射新項目

做這件事時

realm.where(Intake.class) 
      .findAllSorted("time", Sort.DESCENDING) 
      .asObservable() 

我得到物品的完整列表,但是當soemthing變化(即產品加入),我又得到了完整列表。

什麼是RxJava的方式來獲得新的項目?

在此先感謝

回答

0

您正在訪問的查詢結果。由於您的查詢可以包含多個項目(findAllSorted()),因此您始終會觀察RealmResults,當發生更改時會發出所有已排序的項目(請參閱docs)。

你可以做這樣的事情:

realm.where(Intake.class) 
    .findAllSorted("time", Sort.DESCENDING) 
    .asObservable() 
    .flatMapIterable(results -> results) 
    .distinct(); 

這確實2個更多的東西:

  • 將您RealmResults奇異Intake實例
  • 只有讓不同的項目通過(請確保您的Intake正確地執行equals()

但是,這會增加一些額外的CPU負載,因爲每次查詢通過新的RealmResult時,都會執行處理以過濾出不同的項目。

在上面的例子中,排序將在發射的Intake對象的初始集合上工作。然而,任何後續排放的物品都可能被無序地觀察到,因爲它們是新的並在初始結果之後排放。

+0

以及如何處理刪除的項目? – Cheborra

+0

我並不熟悉Realm,但我的猜測是調用Intake Observable上的filter()來過濾掉已刪除的。 –