Android RXJava2捕获IOException从Obserable中抛出

Android RXJava2捕获IOException从Obserable中抛出,android,rx-android,Android,Rx Android,以下Android Java代码在执行此代码后不久调用compositedisposable.clear()时引发IOException compositeDisposable.add(Observable.zip(Observable.fromIterable(listOfDates), Observable.interval(200, TimeUnit.MILLISECONDS), (adate, timer) -> adate)

以下Android Java代码在执行此代码后不久调用compositedisposable.clear()时引发IOException

compositeDisposable.add(Observable.zip(Observable.fromIterable(listOfDates),
            Observable.interval(200, TimeUnit.MILLISECONDS),
            (adate, timer) -> adate)
            .map((sd) -> (Globals._BASE_URL + sd.getDate()))
            .subscribe(url -> {
                compositeDisposable.add(Observable.fromCallable(new Callable<Response>() {
                    @Override
                    public okhttp3.Response call() throws Exception {
                        Request request = new Request.Builder()
                                .url(url)
                                .build();
                        return okHttpClient.newCall(request).execute();
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe((response) -> {
                    ...
                }));
    }));
compositeDisposable.add(Observable.zip)(Observable.fromIterable(listOfDates)),
可观察的时间间隔(200,时间单位毫秒),
(adate,timer)->adate)
.map((sd)->(Globals.\u BASE\u URL+sd.getDate())
.订阅(url->{
compositeDisposable.add(Observable.fromCallable(newcallable)(){
@凌驾
public okhttp3.Response调用()引发异常{
Request Request=newrequest.Builder()
.url(url)
.build();
返回okHttpClient.newCall(request.execute();
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅((响应)->{
...
}));
}));
查看logcat异常文本,我几乎可以肯定异常发生在“return okHttpClient.newCall(request.execute();”行中


如何捕获此异常?

经过一些调试后,我得到了以下代码,可以正常工作

compositeDisposable.add(Observable.zip(Observable.fromIterable(listOfDates),
            Observable.interval(200, TimeUnit.MILLISECONDS),
            (adate, timer) -> adate)
            .map((sd) -> (Globals._BASE_URL + sd.getDate()))
            .subscribe(url -> {
                Observable.fromCallable(new Callable<Response>() {
                    @Override
                    public okhttp3.Response call() throws Exception {
                        Request request = new Request.Builder()
                                .url(url)
                                .build();
                        return okHttpClient.newCall(request).execute();
                    }
                })
                .onErrorResumeNext((throwable) -> {Timber.e("Exception caught: " + throwable.toString());})
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe((response) -> {
                    ...
                });
    }));
compositeDisposable.add(Observable.zip)(Observable.fromIterable(listOfDates)),
可观察的时间间隔(200,时间单位毫秒),
(adate,timer)->adate)
.map((sd)->(Globals.\u BASE\u URL+sd.getDate())
.订阅(url->{
Observable.fromCallable(新Callable(){
@凌驾
public okhttp3.Response调用()引发异常{
Request Request=newrequest.Builder()
.url(url)
.build();
返回okHttpClient.newCall(request.execute();
}
})
.onErrorResumeNext((throwable)->{Timber.e(“捕获异常:”+throwable.toString());})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅((响应)->{
...
});
}));
onErrorResumeNext捕获okHttpClient引发的IOException。 我还发现,原始代码中的内部“compositeDisposable.add”在调用compositeDisposable.clear时创建了一个条件,而Observable.zip仍在发出信号。我还不知道为什么zip在compositeDisposable.clear之后会继续发射,因为它也被添加到了一次性文件中

在任何情况下,我还没有设法在我尝试过的任何手机上崩溃这段代码,所以它看起来相当健壮。我希望它能帮助有同样问题的人