以下Android Java代码在执行此代码后立即调用compositeDisposible.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) -> {
...
}));
}));
查看logcat异常文本,我几乎可以肯定异常发生在行&#34;返回okHttpClient.newCall(request).execute();&#34;
如何捕获此异常?
答案 0 :(得分:0)
经过一些调试后,我得到了以下代码才能正常运行
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) -> {
...
});
}));
onErrorResumeNext捕获okHttpClient抛出的IOException。 我还发现当我的原始代码中的内部“compositeDisposable.add”在Observable.zip仍在发出时调用compositeDisposable.clear时创建了一个条件。我还不知道为什么zip会在compositeDisposable.clear之后继续发出,因为它也被添加到Disposable中。
无论如何,我还没有设法在我试过的任何手机上崩溃这个代码,所以看起来非常强大。我希望它可以帮助有同样问题的人。