Android RXJava2捕获IOException从Obserable中抛出
以下Android Java代码在执行此代码后不久调用compositedisposable.clear()时引发IOExceptionAndroid 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)
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之后会继续发射,因为它也被添加到了一次性文件中
在任何情况下,我还没有设法在我尝试过的任何手机上崩溃这段代码,所以它看起来相当健壮。我希望它能帮助有同样问题的人