Realm asObservable()仅发出新项

时间:2016-04-23 14:24:07

标签: realm rx-java

我是RxJava的新手,并尝试使用Realm Observable功能。

这样做

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

我得到完整的项目列表,但是当soemthing发生变化(即添加了项目)时,我再次获得完整列表。

什么是RxJava方式才能获得新项目?

提前致谢

1 个答案:

答案 0 :(得分:0)

您目前正在观察查询结果。由于您的查询可以包含多个项目findAllSorted()),因此您始终会观察RealmResults,这会在发生更改时发出所有已排序的项目(请参阅docs)。

您可以这样做:

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

这还有两件事:

  • 将您的RealmResults转换为单数Intake个实例
  • 仅允许不同的项目通过(确保Intake正确实施equals()

然而,这会增加一些额外的CPU负载,因为每次查询传递新的RealmResult时,都会进行处理以过滤掉不同的项目。

在上面的示例中,排序将对初始发射的Intake对象集合起作用。但是,任何后续发射的物品都可能无序地被观察到,因为它们是新的并且在初始结果之后被发射。