2016-01-21 59 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