您好我正在尝试实现一个将两个请求链接在一起的单个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()}
)
}
答案 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()}
)