繁体   English   中英

喷气背包组成。 无限调用observeAsState

[英]jetpack compose. infinite call to observeAsState

我使用observeAsState function 监视视图模型中的变量的行为。 当我得到我需要的 state 时,我切换到另一个屏幕,但之后我的程序陷入了无限循环。 我做错了什么,请告诉我?

下图显示了来自视图模型的监控变量的日志

在此处输入图像描述

下面的代码显示了唯一的 function ,我在其中更改了_loginStatus的值,我需要通过observeAsState对其进行跟踪。 _loginStatus的值在其他任何地方都没有变化:

fun authorize(automaticLoad: Boolean = false) = CoroutineScope(Dispatchers.IO).launch {

        setStatus(Status.Loading())
        repository.authoriseAccount(storedLogin.value.orEmpty().trim(), storedPassword.value.orEmpty().trim(), getApplication()).let {
            withContext(Dispatchers.Main) {
                when (it) {
                    is Resource.Success -> {
                        
                        _loginStatus.postValue(Status.Success(it.data))

                    }
                    is Resource.Error -> {
                        Log.e("AUTH", "auth error")
                        if (!automaticLoad){
                            _loginStatus.postValue(Status.Error("Incorrect login or password entered"))
                        }
                        else{
                            _loginStatus.postValue(Status.Error())
                        }
                    }

                }
                //_loginStatus.postValue(Status.Ready())
                _loginStatus.setValue(Status.Ready())
            }
        }
    } 

可组合 function 中的代码:

val status by  viewModel.loginStatus.observeAsState()
    Log.e("tag", status.toString())

我有同样的问题,我用这种方式解决了

val status by  viewModel.loginStatus.observeAsState()
    Log.e("tag", status.toString())

LaunchedEffect(true) {
     viewModel.authorize()
 }

//whatever you want to do with the status variable

原因在这里解释: https://developer.android.com/jetpack/compose/side-effects

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM