2016-01-21 40 views
0

大家好,我是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(); 

回答

0

我的猜测是你想要一个io调度程序来做网络调用,而不是主线程。所以这样的:

.observeOn(AndroidSchedulers.mainThread()) 

应该是这样的:

.observeOn(AndroidSchedulers.io()) 

记住observeOn导致要在不同的调度做了一个可观察的排放量,这导致网络电话要在主线程上执行(因此错误)。

如果android中没有io-scheduler,请使用适当的io-scheduler。

+0

谢谢你做到了!对于具有相同问题的人员,如果UI更改取决于异步值,则可以在长时间运行io操作完成后再次在UI线程上调用.observeOn。 [更多信息](http://stackoverflow.com/questions/30211397/rxandroid-ui-changes-on-schedulers-io-thread)。 – 0019