Android 如何在使用kotlin进行数据库调用之前呈现视图
我对koin有一个奇怪的问题(可能?我以前没有过这个问题) 我使用的是Android 如何在使用kotlin进行数据库调用之前呈现视图,android,kotlin,koin,Android,Kotlin,Koin,我对koin有一个奇怪的问题(可能?我以前没有过这个问题) 我使用的是Flow(从dao到视图模型)和LiveData(从视图模型到片段)的组合 我的存储库如下所示: fun getPets(): Flow<Status> = flow { emit(Status.LOADING) SystemClock.sleep(5000) emit(Status.PETS(petsDao.getPets())) } priva
Flow
(从dao到视图模型)和LiveData
(从视图模型到片段)的组合
我的存储库如下所示:
fun getPets(): Flow<Status> = flow {
emit(Status.LOADING)
SystemClock.sleep(5000)
emit(Status.PETS(petsDao.getPets()))
}
private val petsViewModel: PetsViewModel by viewModel()
petsViewModel.status.observe(viewLifecycleOwner, Observer {status ->
if (status == LOADING) {
uiListener.displayProgressBar(true)
} else if(status == PETS) {
//Show pets data
}
})
观察如下数据:
fun getPets(): Flow<Status> = flow {
emit(Status.LOADING)
SystemClock.sleep(5000)
emit(Status.PETS(petsDao.getPets()))
}
private val petsViewModel: PetsViewModel by viewModel()
petsViewModel.status.observe(viewLifecycleOwner, Observer {status ->
if (status == LOADING) {
uiListener.displayProgressBar(true)
} else if(status == PETS) {
//Show pets data
}
})
Koin视图模型设置:
viewModel {
PetsViewModel(
petsRepository = get(),
context = androidContext()
)
}
问题是,当我启动应用程序时,我获得了状态。正在加载,但没有任何视图
当状态更改为Staus.PETS时,我将获得PETS数据和视图
这就好像视图模型太快了,在我有机会膨胀视图之前,它就调用了存储库(我记录了生命周期,它确实在恢复之前调用)
如何修复代码?在我看来,与其使用sleep(blocking method),后者只会阻止执行,不如使用自定义回调
findViewById(您的视图id)