【发布时间】:2020-03-19 00:14:40
【问题描述】:
我的应用程序具有以下顺序。 在数据库层我有返回 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 尚未初始化
【问题讨论】:
标签: kotlin android-room android-livedata android-viewmodel