Использование отложенного <...> в комнате DAO с сопрограммами Kotlin - PullRequest
1 голос
/ 30 апреля 2019

Я пытаюсь использовать сопрограммы с базой данных Room в проекте Android. Я почти не нашел документации в Интернете, и мне интересно, можно ли в этих методах возвращать типы 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'

1 Ответ

3 голосов
/ 01 мая 2019

Ваша проблема заключается в том, что вы смешиваете конвертер suspend и конвертер Deferred. Используйте один или другой, и ваш код будет работать как положено.

  • fun readMyObjectAsync(idMyObject: Int): Deferred<MyObject> - Лучший выбор, если вам нужно взаимодействовать / быть совместимым с Java-кодом, поскольку для его работы не требуется преобразований кода.
  • suspend fun readMyObjectAsync(idMyObject: Int): MyObject - Если вы работаете на чистом kotlin, это позволит лучше контролировать контекст, в котором он вызывается.
...