2017-06-06 25 views
0

下面的Android Java代码在执行此代码后立即调用compositeDisposible.clear()时抛出IOException。RXJava2捕获从内部抛出的IOException Obserable

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的异常文本,我几乎可以肯定的是,发生异常时本着“回归okHttpClient.newCall(请求).execute();”

我怎样才能捕捉到这个异常?

回答

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中。

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

相关问题