使用带有房间的 kotlin 协程

Posted

技术标签:

【中文标题】使用带有房间的 kotlin 协程【英文标题】:Using kotlin coroutines with room 【发布时间】:2020-01-04 11:37:27 【问题描述】:

在 2.1 Room 中添加了对协程的支持,但我无法让它工作。它应该像添加依赖项一样简单,但不知何故我忽略了一些东西。

在我的 build.gradle 中,我得到了协程、房间和房间协程的依赖项

dependencies  
    def room_version = "2.2.0-beta01"
    // Room components
    implementation "android.arch.persistence.room:runtime:$room_version"
    kapt "android.arch.persistence.room:compiler:$room_version"
    implementation "androidx.room:room-ktx:$room_version"
    androidTestImplementation "android.arch.persistence.room:testing:$room_version"
    def coroutines_version = "1.1.1"
    // Coroutines
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"

我已经尝试过重新同步 gradle、清理和重建项目。

在我的 Doa 中,我有如下方法

@Dao
interface PlanDao 
    @Insert
    suspend fun insertVerPlan(verPlan: SqlVerPlan)

在尝试构建项目时,Room 不知道如何处理挂起功能,出现以下错误:

error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
    kotlin.coroutines.Continuation<? super kotlin.Unit> p1);
                                                        ^

error: Methods annotated with @Insert can return either void, long, Long, long[], Long[] or List<Long>.
    public abstract java.lang.Object insertVerPlan(@org.jetbrains.annotations.NotNull()
                                     ^

我真的不知道我错过了什么,自从新的 Room 版本以来,我找不到任何遇到同样问题的人。

【问题讨论】:

你好,不要附上git的链接,我想看看你是如何使用协程的 【参考方案1】:

您正在混合不同版本的房间库。

android.arch.persistence.room:runtime 应该是androidx.room:room-runtime

android.arch.persistence.room:compiler 应该是androidx.room:room-compiler

android.arch.persistence.room:testing 应该是androidx.room:room-testing

根据Room#Declaring dependencies

由于您为编译器使用旧坐标,它不知道suspend 支持。

【讨论】:

以上是关于使用带有房间的 kotlin 协程的主要内容,如果未能解决你的问题,请参考以下文章

添加 kotlin 协程和房间后无法进行发布构建,proguard 警告

Xamarin 是不是支持 Xamarin Android 绑定库中的 Kotlin 协程?

Kotlin 协程协程底层实现 ① ( Kotlin 协程分层架构 | 基础设施层 | 业务框架层 | 使用 Kotlin 协程基础设施层标准库 Api 实现协程 )

Kotlin 协程协程底层实现 ① ( Kotlin 协程分层架构 | 基础设施层 | 业务框架层 | 使用 Kotlin 协程基础设施层标准库 Api 实现协程 )

kotlin协程的生命周期与jetpack组件绑定

kotlin 协程万字协程 一篇完成kotlin 协程进阶