【问题标题】:Room LiveData not updating correctly房间 LiveData 未正确更新
【发布时间】:2021-05-22 11:54:39
【问题描述】:

我有一个房间查询,它选择过去一小时内提交的订单。当我添加/编辑订单时,一切正常。

@Query("SELECT * FROM OrderTable WHERE datetime(delivery_date) > datetime('now','-1 hour','localtime') ORDER BY datetime(delivery_date) DESC")
fun getAllAvailable(): LiveData<List<Order>>

问题是当我在过去几个小时内有一些订单并且订单表中没有编辑/添加时,订单在超过一小时范围后不会消失!

让我用一个简单的例子来解释: 有一个delivery_date为2021-05-22 14:00的订单,当设备时间为2021-05-22 14:30时livedata结果显示该订单没问题,时间过去后为2021-05 -22 15:01 它应该从结果中删除订单,但它不会并且总是显示订单,直到下一次添加/编辑订单表和实时数据更新!!

P.S:我应该提到 Room 数据库实例是使用刀柄的单例。

【问题讨论】:

    标签: android android-room android-livedata


    【解决方案1】:

    您正在使用查询来获取最后一小时的 LiveData,但除非房间数据库发生更改或您的活动/片段的生命周期恢复,否则它将不会执行。

    再次参考:Documentation for LiveData

    这是一个简单的序列:

    1. 数据库更改
    2. Livedata 更新观察者
    3. 观察者被执行

    在您的情况下,您正在实现查询中的逻辑,它不知道应该执行它。

    您可以使用 runnable 来实现您想要的。考虑this

    【讨论】:

    • 谢谢你的回答,我想知道iivedata是否没有更新,为什么观察者一次又一次地收到订单(当我登录时我看到它不断收到)?除了创建持续更新调用之外还有其他方法吗?
    • @MohamadMohamadPoor 即使您停留在相同的活动/片段上,是否也会不断地调用观察者?如果发生这种情况,请检查您的日志。但是在检查日志时不要导航到任何其他组件,因为在这种情况下会调用观察者。
    • 没错,观察者一次又一次地收到订单列表,即使我在同一个片段中什么也不做!
    • 如果我试试这个,我会更新你的。到那时,如果你愿意,你可以制作一个刷新按钮,你可以在其中再次获取。那更便宜。
    • 非常感谢,我也在试着找出问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多