在房间中使用Kotlin协程

时间:2019-08-31 16:40:50

标签: android kotlin android-room kotlin-coroutines

在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版本以来,我找不到遇到相同问题的任何人。

1 个答案:

答案 0 :(得分:2)

您要混合使用不同版本的会议室库。

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的支持。