Android 如何将Sqldelight与Kotlin协同程序一起使用

Android 如何将Sqldelight与Kotlin协同程序一起使用,android,kotlin,kotlin-coroutines,sqldelight,Android,Kotlin,Kotlin Coroutines,Sqldelight,SqlDelight显然有Kotlin协程扩展函数,但我不知道如何实现它们,因为我找不到文档 我有一个普通查询,如下所示: val allItems get() = itemQueries.selectAll().mapToList() 我可以将其转换为挂起函数吗?目前(1.2.1版)没有对SqlDelight查询的挂起函数支持,但是您可以使用Coroutines流对象,这更好。为此,您需要在应用程序gradle中添加协同程序扩展库: dependencies { implementa

SqlDelight显然有Kotlin协程扩展函数,但我不知道如何实现它们,因为我找不到文档

我有一个普通查询,如下所示:

val allItems
  get() = itemQueries.selectAll().mapToList()
我可以将其转换为挂起函数吗?

目前(1.2.1版)没有对SqlDelight查询的挂起函数支持,但是您可以使用Coroutines流对象,这更好。为此,您需要在应用程序gradle中添加协同程序扩展库:

dependencies {
  implementation "com.squareup.sqldelight:coroutines-extensions:1.2.1"
}
然后将您的查询转换为:

val allItems: Flow<List<Item>> = 
  itemQueries.selectAll()
    .asFlow()
    .mapToList()
val allItems:Flow=
itemQueries.selectAll()
.asFlow()
.mapToList()
此流将发出查询结果,并在每次数据库更改该查询时发出新结果


然后,您可以
。在协同路由范围内收集{}
结果。

对于单次快照查询,您不需要协同路由扩展库。相反,只要做:

suspend fun getAllItems() = withContext(Dispatchers.IO) {
    itemQueries.selectAll().mapToList()
}

答案特定于您希望何时对数据库中的更改做出反应。

对于多平台项目,除了这个极好的答案之外:在commonMain中添加依赖项,并使用最新的lib版本(当前为1.3.0)
commonMain.dependencies{implementation..}
官方文档: