Получить сущность, используя сопрограммы API - PullRequest
1 голос
/ 22 января 2020

Как лучше всего использовать coroutines с LiveData для выбора некоторых данных из базы данных, используя Room.

Это класс My Dao с приостановленным выбором

@Dao
interface UserDao {

    @Query("SELECT * from user_table WHERE id =:id")
    suspend fun getUser(id: Long): User
}

Внутри класса Модель Я загружаю пользователя с viewModelScope.

Правильный ли способ получения сущности пользователя?

fun load(userId: Long, block: (User?) -> Unit) = viewModelScope.launch {
    block(database.load(userId))
}

Согласно Разработчик android упоминается

val user: LiveData<User> = liveData {
    val data = database.loadUser() // loadUser is a suspend function.
    emit(data)
}

Этот фрагмент кода не работает

1 Ответ

1 голос
/ 22 января 2020

Ваша комната должна возвращать LiveData.

Вместо этого используйте:

@Dao
interface UserDao {

    @Query("SELECT * from user_table WHERE id =:id")
    fun getUser(id: Long): LiveData<User>
}
...