Мое приложение имеет следующую последовательность. В слое базы данных у меня есть запрос, который возвращает LiveData
@Query("Select * from sites where server_id = :serverId and site_id = :siteId")
fun getSite(serverId: Long, siteId: Int): LiveData<SiteDto>
В моем хранилище у меня есть функция, которая возвращает этот запрос
override fun retrieveSite(serverId: Long, siteId: Int): LiveData<SiteDto> {
return sitesDao.getSite(serverId, siteId)
}
И в моей деятельности я наблюдаю SiteDto, поэтому я может отображать некоторую информацию об этом, НО только при определенных условиях, которые исходят из намерения действия. Так что
if(condtion) {
myViewModel.getSite().observe(this, Observer {
it?.let {
println(it.description)
}
})
}
Как видите, для запроса нужны некоторые параметры (serverId, siteId), которые я получаю из Intent. Поэтому после того, как я объявил myViewModel, я передаю параметры в функции setArguments (...) в viewModel. (Я мог бы использовать ViewModelFactory, но параметры не всегда одинаковы, поэтому забудьте об этом)
Так что проблема в том, как мне взять сайт из своего хранилища внутри моей ViewModel после того, как я получу аргументы
private lateinit var _siteDto: LiveData<SiteDto>
fun setArguments(....) {
_siteDto = accountsRepository.retrieveSite(serverId, siteId)
}
fun getSite(): LiveData<SiteDto> {
return _siteDto
}
Когда я запускаю его, я получаю следующую ошибку
kotlin .UninitializedPropertyAccessException: свойство lateinit siteDto не было инициализировано