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