在Kotlin协程中在Room DAO中使用Deferred <...>

ber*_*o.g 3 android android-room kotlin-coroutines

我正在尝试将协程与Android项目中的Room数据库一起使用。我几乎没有在线找到任何文档,我想知道是否有可能Deferred<>在这些方法中返回类型。像这样:

@Dao
interface MyObjectDAO {

@Query("SELECT * FROM myObject WHERE id_myObject = :idMyObject")
suspend fun readMyObjectAsync(idMyObject: Int): Deferred<MyObject>
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了,并且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'
Run Code Online (Sandbox Code Playgroud)

Kis*_*kae 6

您的问题在于您正在混合suspending转换器和Deferred转换器。使用其中之一,您的代码将按预期工作。

  • fun readMyObjectAsync(idMyObject: Int): Deferred<MyObject> -如果您需要接口/与Java代码兼容,则是最佳选择,因为它不需要代码转换即可真正起作用。
  • suspend fun readMyObjectAsync(idMyObject: Int): MyObject -如果您使用纯Kotlin进行操作,则可以通过调用它的上下文更好地进行控制。