Android 视图模型始终观察
Android viewmodel observing always
我正在使用 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 调用一次又一次地发生,直到它成功。为什么会这样?
为什么我的视图模型不能仅在单击登录按钮时观察到?
当你说 viewModel.onLoginPressed.observe
时,activity/fragment 将在处于 started
或 resumed
状态时接收事件,当它被销毁时,观察者将自动被删除。
您似乎在 viewModel
中有一个不断重试的重试逻辑。
我正在使用 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 调用一次又一次地发生,直到它成功。为什么会这样? 为什么我的视图模型不能仅在单击登录按钮时观察到?
当你说 viewModel.onLoginPressed.observe
时,activity/fragment 将在处于 started
或 resumed
状态时接收事件,当它被销毁时,观察者将自动被删除。
您似乎在 viewModel
中有一个不断重试的重试逻辑。