小编Ali*_*tar的帖子

Kotlin 协程等待 2 个或更多不同的并发请求

我正在使用 kotlin 协程从带有 viewmodel 的 android 中的服务器获取响应。问题是我想获得两个不同的请求响应来更新 ui 但想同时执行它们并等待它们都完成。然后使用收到的所有结果更新 ui。如果在每个请求之后使用 async 和 await 它将一一执行并且它不是并发的,如果使用请求映射和 awaitAll(),我无法处理多种数据类型(数据类),因为两个请求的数据类型不同. 可能不止两个请求。对于这种情况我该怎么办?

val job = viewModelScope.launch {

        val a = async { firstUseCase.execute() }.await()
        val b = async { secondUseCase.execute() }.await()
 }
Run Code Online (Sandbox Code Playgroud)

android kotlin android-viewmodel kotlin-coroutines

2
推荐指数
2
解决办法
1484
查看次数

MVVM RXAndroid无法在后台线程上调用setValue

在我的应用程序中,我请求json填充recyclerview,它在init int kotlin viewmodel中的第一个总是成功,但是当我想再次在timer.schedule方法中请求时,它转到一次性订阅中的onError方法,这是Edittext的onTextChange绑定在xml视图中:

fun onSearchTextChanged(text: CharSequence) {
    if (text.isNotEmpty()) {
        if (myTimer != null) {
            myTimer!!.cancel()
        }

        myTimer = Timer()
        myTimer!!.schedule(object : TimerTask() {
            override fun run() {
                loadMovies(text.toString(), 1)
            }

        }, 1000)
    } else {
        if (myTimer != null) {
            myTimer!!.cancel()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的请求方法:

fun loadMovies(searchText: String, pageNumber: Int) {
    subscription = searchApi.getSearch(API_KEY, searchText, pageNumber)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .doOnSubscribe { onRetrieveMoviesListStart() }
        .doOnTerminate { onRetrieveMoviesListFinish() }
        .subscribe(
            { result -> onRetrieveMoviesListSuccess(result) },
            { err -> onRetrieveMoviesListError(err) })
} …
Run Code Online (Sandbox Code Playgroud)

android rx-android retrofit2

1
推荐指数
1
解决办法
864
查看次数