我正在使用KoinDI
,并且有一个登录屏幕。这是我的代码-
我的AppModule代码显示了LoginViewModel
DI定义-
private val viewModelModules = module {
viewModel { LoginViewModel(get()) }
}
我的LoginFragment
代码-
private val viewModel: LoginViewModel by viewModel()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.login_button?.setOnClickListener {
onLoginButtonPressed()
}
}
private fun onLoginButtonPressed() {
val email = view?.email_value?.text.toString()
val password = view?.password_value?.text.toString()
viewModel.onLoginPressed(email, password).observe(this, Observer {
if (it.userLoggedIn) {
//...
}
handleError(it.error)
})
}
问题是当我单击登录并立即将应用置于后台并且API调用失败时(我故意使它失败) 用于从后端进行测试),当我将应用程序置于前台时,我看到 viewmodel继续观察,导致API调用一次又一次地发生,直到成功为止。为什么会发生? 为什么我的视图模型不能仅在登录按钮单击时观察到?
答案 0 :(得分:1)
当您说viewModel.onLoginPressed.observe
时,活动/片段将处于started
或resumed
状态,并且销毁时,观察者将被自动删除。
viewModel
中似乎有一个重试逻辑,可以继续重试。