gpt4 book ai didi

Android - Room Persistence Library - 根据需要同步和通过观察者访问数据

转载 作者:行者123 更新时间:2023-11-30 05:08:29 25 4
gpt4 key购买 nike

问题:

我正在使用 Room Persistence Library,到目前为止一切正常,除了有一个来自选择查询的数据,我需要同步它,因为我从定期作业(工作经理的工作人员)调用它。我已将返回类型定义为 LiveData,因为我也在 UI 中出于显示目的访问它,因此观察者非常适合,但现在我在 Job 中也需要相同的数据。

代码 fragment

@Query("SELECT * from readings ORDER BY date, time ASC")
LiveData<List<Reading>> getAllReadings();

尝试过

我在 LiveData 中尝试了 getValue() 方法,但它返回 null,因为在进行查询时数据未加载到 LiveData 中。

readingDao().getAllReadings().getValue() // returns null

可能的解决方案

我能想到的只有一个解决方案,即使用不同的名称和返回类型(没有 LiveData)复制 getAllReadings 查询,但我认为这不是一种干净的方法,因为它增加了代码重复,只是为了获取同步返回类型。

请让我知道是否有任何其他解决方案或某种方法可以从 LiveData 变量同步访问数据。

最佳答案

您可以在初始化 Room DB 时允许主线程查询,但这显然是不可取的。这将为您提供同步行为,但会阻止用户界面。您是否有特定原因希望这是同步的?

getValue() 返回 null 的原因是 Room 正在异步查询数据。您可以附加一个观察者或回调函数以在查询完成时获取结果。您可以将结果显示到 UI 或从那里链接另一个调用以进行顺序操作等。

我使用 RxJava 来包装异步查询的查询请求,但我也可以使用 AsyncTask。

关于Android - Room Persistence Library - 根据需要同步和通过观察者访问数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54116312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com