0

我正在使用 Kotlin 和 Flow 来使用查询结果的普通 JVM 项目中使用 MySql 和 Hikary 数据源来玩 SqlDelight。查询的第一次执行按预期返回数据,但是当数据库上的数据发生更改时不会触发 Flow#emit()。

这是我正在调用的存储库功能:

fun getAllUser(): Flow<List<User>> = database.userQueries.getAll()
      .asFlow()
      .mapToList()

这是调用存储库函数的主要函数:

    fun main() = runBlocking<Unit> {   repository.getAllUser().collect {
      println("Collecting users: $it")
   }
}

我已经尝试调试底层代码,并且注册了 Query 对象上的侦听器,并且在执行存储库函数时正确阻止了 main。还有其他人经历过类似的事情吗?

4

1 回答 1

0

太愚蠢了,我的坏!我正在手动更新数据库,并希望看到 Flow 神奇地更新。无论如何,通过 SqlDelight 函数更新数据库会导致 Flow 按预期发出更新的记录集。

于 2020-10-24T16:20:10.730 回答