链接2个不同的异步操作,这些操作取决于可观察的值

时间:2016-01-21 04:17:33

标签: android rx-java

大家好,我是RxJava的新手,并试图围绕一些概念。我需要从api中获取一个值,然后对依赖于该值的api再运行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();

1 个答案:

答案 0 :(得分:0)

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

.observeOn(AndroidSchedulers.mainThread())

应该是这样的:

.observeOn(AndroidSchedulers.io())

请记住,observeOn导致可观察的排放在不同的调度程序上完成,这导致网络调用在主线程上执行(因此错误)。

如果android中没有io-scheduler,请使用合适的。{/ p>