LiveData Observer UninitializedPropertyAccessException: свойство lateinit siteDto не было инициализировано - PullRequest
0 голосов
/ 19 марта 2020

Мое приложение имеет следующую последовательность. В слое базы данных у меня есть запрос, который возвращает 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 не было инициализировано

...