簡體   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