gpt4 book ai didi

android - 如何将 viewModelScope.launch{} 的结果作为函数的返回值发送?

转载 作者:行者123 更新时间:2023-12-04 23:57:34 25 4
gpt4 key购买 nike

在下面的代码 fragment 中,如何在 viewModelScope.launch 完成后获取 isValid 的值。

viewModelScope.launch 最后在 fun checkCode() 中运行。所以 fun checkCode() 总是返回 false。

fun someListener() {
if (checkCode() == true) {
//do something
}
}

fun checkCode(): Boolean {
var isValid = false

viewModelScope.launch(Dispatchers.Main) {
val response = withContext(Dispatchers.IO) {
// something do in background
}

if (response == "someString") {
isValid = true
// tried to type "return isValid" but syntax error
}
}

// the problem is below statements run before viewModelScope.launch
if (isValid) return true
else return false
}

最佳答案

suspend 函数在后台线程上运行。要从该函数而不是使用 return 获取结果,请使用 LiveData

private val _isValid = MutableLiveData<Boolean>()
val isValid: LiveData<Boolean> // To observe the value outside the ViewModel class.
get() = _isValid

...
suspend fun doBackgroundWork() {
...
_isValid.postValue(true)
...
}

现在您可以在后台线程中更新私有(private)值并在 View Controller (Fragment/Activity)中观察这一点,当您获得更新值时进行适当的操作。

使用来自 Documentation 的 liveData 的几种不同方式

关于android - 如何将 viewModelScope.launch{} 的结果作为函数的返回值发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67343540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com