带有LiveData的协程

时间:2019-05-13 12:17:04

标签: android-room coroutine android-jetpack

尝试运行以下代码时出现编译错误:

如果我将返回类型更改为List,则代码成功完全运行,但是我想从暂停的函数中返回实时数据对象。

@Dao
interface TodoDao {
    @Query("SELECT * from Todo where category_name = :category_name")
    suspend fun getAllTodo(category_name : String) :LiveData<List<Todo>>
}
Compiler throws error: Not sure how to convert a Cursor to this method's return type (LiveData<List<Todo>>).
public abstract java.lang.Object getAllTodo(@org.jetbrains.annotations.NotNull()

    def room_version = '2.1.0-beta01'

    //Room
    implementation "androidx.room:room-ktx:$room_version"
    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version"

    //View model
    implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-beta01'
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0-beta01"

    api "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.2.1"

任何帮助将不胜感激。 谢谢

1 个答案:

答案 0 :(得分:0)

您不能在会议室中使用suspend。 您可以删除它,也可以将其与List <>一起使用,然后在ViewModel中将其添加到MutableLiveData中。 您可以通过在CoroutineScope上调用post方法来做到这一点。