我是RxJava的新手,并尝试使用Realm Observable功能。
这样做
realm.where(Intake.class)
.findAllSorted("time", Sort.DESCENDING)
.asObservable()
我得到完整的项目列表,但是当soemthing发生变化(即添加了项目)时,我再次获得完整列表。
什么是RxJava方式才能获得新项目?
提前致谢
答案 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
对象集合起作用。但是,任何后续发射的物品都可能无序地被观察到,因为它们是新的并且在初始结果之后被发射。