有没有办法观察房间数据库中一组值的总和?

问题描述

我在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"