问题描述
我在Room数据库中有一组读取日志,并且我希望能够观察到具有今天日期的所有行的minutesRead
列的总和,以便能够知道用户有多少页今天读过。我可以查询总和,并使用此方法正确获取它:
@Query("SELECT SUM(pagesRead) FROM log_table WHERE bookId IS :bookId AND date >= :date")
fun getPagesRead(bookId: String,date: Long): Int?
我的问题是,是否有办法以某种方式观察到这种情况,以便每当添加具有今天日期的日志时,它都会重新计算总和并更新其所有可观测值?
解决方法
您可以使用实时数据观察变化。
将返回类型更改为LiveData<Int>
:
@Query("SELECT SUM(pagesRead) FROM log_table WHERE bookId IS :bookId AND date >= :date")
fun getPagesRead(bookId: String,date: Long): LiveData<Int>
这样观察它:
getPagesRead.observe(viewLifecycleOwner,Observer { sum ->
// Update the UI.
})
LiveData依赖项:
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"