链接2个依赖于可观察值的异步操作
问题描述:
大家好,我是RxJava的新手,并试图围绕一些概念进行思考。我需要从api中获取一个值,然后对依赖于该值的api运行另外2个查询。链接2个依赖于可观察值的异步操作
我试着用这种方式实现它,但它给了我一个NetworkOnMainThreadException。有没有办法“分流”这个流,还是我的理解存在缺陷?任何帮助表示赞赏。
ConnectableObservable<Value> getSomeValueStream =
_api
.someHttpAsyncTask()
.map(parseJsonResponse)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.publish();
getSomeValueStream
.flatMap(HttpAsyncTask2Stream)
.subscribe();
getSomeValueStream
.flatMap(HttpAsyncTask3Stream)
.subscribe();
getSomeValueStream.connect();
答
我的猜测是你想要一个io调度程序来做网络调用,而不是主线程。所以这样的:
.observeOn(AndroidSchedulers.mainThread())
应该是这样的:
.observeOn(AndroidSchedulers.io())
记住observeOn
导致要在不同的调度做了一个可观察的排放量,这导致网络电话要在主线程上执行(因此错误)。
如果android中没有io-scheduler,请使用适当的io-scheduler。
谢谢你做到了!对于具有相同问题的人员,如果UI更改取决于异步值,则可以在长时间运行io操作完成后再次在UI线程上调用.observeOn。 [更多信息](http://stackoverflow.com/questions/30211397/rxandroid-ui-changes-on-schedulers-io-thread)。 – 0019