[英]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.