android 在循环中运行suspend函数后值仅调用一次

idv4meu8  于 2022-12-09  发布在  Android
关注(0)|答案(1)|浏览(160)

下面是我的代码,我想在循环中运行一个suspend函数。
它工作正常,但是postValue并不是每次调用观察器时都更新值,只更新一次。下面是我的代码。

jobSearch = viewModelScope.launch(exceptionHandler) {
            for (category in (searchCategories.value?.data ?: emptyList())) {
                searchResponse.postValue(Resource.loading(null))
                val response =
                    searchResultSource.getSearchResultFromRepo(
                        category?.id,
                        searchTerm,
                        1,
                        Constants.PAGE_SIZE_SEARCH
                    )
                response?.let {
                    searchResponse.postValue(Resource.sucess(response))
                } ?: run {
                    searchResponse.postValue(Resource.error("Something Went Wrong"))
                }
            }
        }
mspsb9vt

mspsb9vt1#

postValue方法将新值加入Main Thread中。如果在主线程将该值传递给观察器之前调用此方法,它将用新值替换旧值。因此,观察器总是读取最后发出的值。您需要用以下代码替换searchResponse.postValue调用,以将所有发出的值传递给观察器:

new Handler(Looper.getMainLooper()).post(() -> searchResponse.setValue(Resource.loading(null)));

new Handler(Looper.getMainLooper()).post(() -> searchResponse.setValue(Resource.sucess(response)));

new Handler(Looper.getMainLooper()).post(() -> searchResponse.setValue(Resource.error("Something Went Wrong")));

相关问题