我有ServiceB依赖于服务A的响应,ServiceB被触发,但是现在我遇到了NetworkOnMainThreadException @ onError的错误。我是RxJava的新手,只是开始尝试示例。请帮助,谢谢。
ServiceA
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(new Function<ResponseA, Observable<ResponseB>>() {
@Override
public Observable<Execution> apply(ResponseA responseA) throws Exception {
return ServiceB(responseA.some_id); #ServiceB gets triggered here
}
})
.subscribe(new Observer<ResponseB>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onComplete() {
}
@Override
public void onError(Throwable t) {
#NetworkOnMainThreadException!
}
@Override
public void onNext(ResponseB responseB) {
}
});
答案 0 :(得分:0)
当您尝试从UI线程连接到url时,将发生NetworkOnMainThreadException,在这种情况下,您需要将stacktrace放在问题中,请注意,服务将在从创建的Thread上运行,因此如果如果从UI线程调用它,该服务将在UI线程上运行。为了避免错误发生,您可以使用许多方法,包括AsyncTask
AsyncTask.execute(new Runnable(
@Override
public void onRun(){
//do the network job here
}
});