RxJava2 + Retrofit 2顺序API调用获取错误NetworkOnMainThreadException

时间:2018-07-21 04:38:40

标签: android rx-java retrofit rx-java2

我有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) {

            }
        });

1 个答案:

答案 0 :(得分:0)

当您尝试从UI线程连接到url时,将发生NetworkOnMainThreadException,在这种情况下,您需要将stacktrace放在问题中,请注意,服务将在从创建的Thread上运行,因此如果如果从UI线程调用它,该服务将在UI线程上运行。为了避免错误发生,您可以使用许多方法,包括AsyncTask

AsyncTask.execute(new Runnable(

     @Override
     public void onRun(){
       //do the network job here
     }
 });