Получить один предмет из комнаты DB. Вызов функции из представления модели - PullRequest
1 голос
/ 04 февраля 2020

Итак, мой общий вопрос - как вызвать функцию из модели представления для @Query, где нужно что-то передать, а затем вернуть что-то. Мой простой пример:

DAO

@Query ("SELECT * FROM table_name WHERE id = :id LIMIT 1")
fun getItemById (id: Long) : MyItem

Репо

fun getItemById (id: Long) : MyItem {
return itemDao.getItemById(id)
}

Я знаю, что это не может и не должно быть сделано на пользовательском интерфейсе. Для вставки и удаления элемента я использую задание viewModelScope, но я не могу (возможно, просто не знаю, как) использовать его для возврата чего-либо. Если я возвращаю его везде как LiveData, то он работает так:

ViewModel

fun itemById(id: Long): LiveData<MyItem> {
 return itemRepo.getItemById(id)
}

И затем я наблюдаю это во фрагменте / действии:

viewModel.itemById(id).observe(this, Observer {
 // using it
})

Дело в том, что я действительно не нуждаюсь в том, чтобы это было наблюдаемой жизнью. Мне нужно только получить его один раз, проверить состояние и все. Так что, может быть, кто-то мог бы порекомендовать, как это сделать, не будучи живым. Или я должен оставить это живые данные?

1 Ответ

1 голос
/ 05 февраля 2020

Если вы хотите получить обновление только один раз, то я рекомендую SingleLiveEvent вместо LiveData. Вот класс, предоставленный Google: Github ссылка

Блог о том, как его использовать: Ссылка

Единственный недостаток SingleLiveEvent заключается в том, что у него не может быть нескольких наблюдателей.

Если вам не нравятся LiveData, вы можете попробовать Rx Java s Single [Observable]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...