我正在尝试将协程与Android项目中的Room数据库一起使用。我几乎没有在线找到任何文档,我想知道是否有可能在这些方法中返回Deferred<>
类型。像这样:
@Dao
interface MyObjectDAO {
@Query("SELECT * FROM myObject WHERE id_myObject = :idMyObject")
suspend fun readMyObjectAsync(idMyObject: Int): Deferred<MyObject>
}
我已经尝试过了,在编译时得到了Not sure how to convert a Cursor to this method's return type
。
我的依赖项是:
kapt 'androidx.room:room-compiler:2.1.0-alpha04'
implementation 'androidx.room:room-runtime:2.1.0-alpha04'
implementation 'androidx.room:room-coroutines:2.1.0-alpha04'
答案 0 :(得分:2)
您的问题在于,您正在混合使用suspend
ing转换器和Deferred
转换器。使用其中之一,您的代码将按预期工作。
fun readMyObjectAsync(idMyObject: Int): Deferred<MyObject>
-如果您需要与Java代码进行交互/兼容,这是最佳选择,因为它不需要代码转换即可真正起作用。suspend fun readMyObjectAsync(idMyObject: Int): MyObject
-如果您使用的是纯Kotlin,则可以更好地控制其调用环境。