【问题标题】:Realm asObservable() emit only new items领域 asObservable() 只发出新项目
【发布时间】:2016-04-23 14:24:06
【问题描述】:

我是 RxJava 新手,正在尝试使用 Realm Observable 功能。

这样做时

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

我得到了完整的项目列表,但是当某些事情发生变化(即添加项目)时,我又得到了完整的列表。

仅获取新项目的 RxJava 方式是什么?

提前致谢

【问题讨论】:

    标签: realm rx-java


    【解决方案1】:

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

    你可以这样做:

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

    这还有两件事:

    • RealmResults 转换为单数Intake 实例
    • 只让不同的项目通过(确保您的Intake 正确实现equals()

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

    在上面的例子中,排序将作用于初始的一组发射的Intake 对象。但是,任何后续发射的项目都可能被观察到无序,因为它们是新的并且在初始结果之后发射。

    【讨论】:

    • 您将如何处理已删除的项目?
    • 我对 Realm 不熟悉,但我的猜测是在 Intake Observable 上调用 filter() 来过滤掉已删除的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2017-05-05
    相关资源
    最近更新 更多