Android viewmodel始终观察

问题描述 投票:0回答:1

我正在使用KoinDI,并且有一个登录屏幕。这是我的代码-

显示LoginViewModel DI定义的我的AppModule代码-

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仅在单击登录按钮后才能观察到?

android android-livedata android-viewmodel koin
1个回答
0
投票

[当您说viewModel.onLoginPressed.observe时,活动/片段将处于startedresumed状态,并且销毁它时,观察者将被自动删除。

[您似乎在viewModel中有重试逻辑,可以继续重试。

© www.soinside.com 2019 - 2024. All rights reserved.