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

Android 链接2个不同的异步操作,这取决于可观察的,android,rx-java,Android,Rx Java,大家好,我对RxJava还不熟悉,我正试图了解一些概念。我需要从api中获取一个值,并对依赖于该值的api运行另外两个查询 我试着用这种方式实现它,但它给了我一个NetworkOnMainThread异常。有没有办法“分叉”这条河,或者我的理解有缺陷?感谢您的帮助 ConnectableObservable<Value> getSomeValueStream = _api .someHttpAsyncTask()

大家好,我对RxJava还不熟悉,我正试图了解一些概念。我需要从api中获取一个值,并对依赖于该值的api运行另外两个查询

我试着用这种方式实现它,但它给了我一个NetworkOnMainThread异常。有没有办法“分叉”这条河,或者我的理解有缺陷?感谢您的帮助

ConnectableObservable<Value> getSomeValueStream =
                _api
                    .someHttpAsyncTask()
                    .map(parseJsonResponse)
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread())
                    .publish();

getSomeValueStream 
            .flatMap(HttpAsyncTask2Stream)
            .subscribe();

getSomeValueStream 
            .flatMap(HttpAsyncTask3Stream)
            .subscribe();

getSomeValueStream.connect();
ConnectableObservable getSomeValueStream=
_原料药
.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调度程序,请使用合适的调度程序。

谢谢你,这是个好办法!对于有相同问题的人,如果您的UI更改依赖于异步值,则可以调用。在长时间运行的io操作完成后,在UI线程上再次观察。