RxJava在主线程

时间:2018-01-14 12:16:49

标签: android multithreading kotlin rx-java2

您好我正在尝试实现一个将两个请求链接在一起的单个observable。

在我发出的两个请求之间,我通知回调以使用来自请求1的响应更新UI,然后在Schedulaers.io线程中启动下一个请求。

我遇到的问题是它也试图从schedulars.io线程更新UI并导致在ui线程中没有更新任何内容。

我在android中的RunOnUiThread代码块上冷回包,但是想知道是否有更优雅的方法呢?

我检查过couroutines,它似乎只是处理将一块代码放在一个单独的线程中。

这是我目前的代码

override fun getHomeScreenInformation() {
    delegator.requestOne()
            .flatMap { responseOne->
                homeScreenCallBack.onResponseOneRecieved(responseOne)
                delegator.requestTwo()
            }
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(
                    {responseTwo-> homeScreenCallBack.onResponseTwoRecieved(responseTwo)},
                    {error -> homeScreenCallBack.onError()}
            )
}

1 个答案:

答案 0 :(得分:7)

根据需要多次申请observeOn(AndroidSchedulers.mainThread())

delegator.requestOne()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread()) // <----------------------
        .flatMap { responseOne ->
            homeScreenCallBack.onResponseOneRecieved(responseOne)
            delegator.requestTwo()
            .subscribeOn(Schedulers.io())          // <----------------------
        }
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
                {responseTwo-> homeScreenCallBack.onResponseTwoRecieved(responseTwo)},
                {error -> homeScreenCallBack.onError()}
        )