2016-12-29 5 views
5

Wie können wir mit verschiedenen Netzwerkfehlern in Rxjava2 umgehen?Umgang mit Netzwerkfehlern in Rxjava 2 - Nachrüstung 2

Wir nutzten die Instanz des throwable zu überprüfen, ob es von IOException ist oder Httpexception zurück mit Rxjava 1, jedoch in RxJava 2 der throwable Fehler vom Typ GaiException.

Code-Schnipsel

RestAPI restAPI = RetrofitHelper.createRetrofitWithGson().create(RestAPI.class); 
Observable<BaseResponseTourPhoto> observable = restAPI.fetchData("Bearer " + getAccessToken(), "2", "" + page) 
     .subscribeOn(Schedulers.io()) 
     .observeOn(AndroidSchedulers.mainThread()); 

Disposable subscription = observable.subscribe(BaseResponse-> { 
    onLoadingFinish(isPageLoading, isRefreshing); 
    onLoadingSuccess(isPageLoading, BaseResponse); 
    writeToRealm(BaseResponse.getData()); 
}, error -> { 
    onLoadingFinish(isPageLoading, isRefreshing); 
    onLoadingFailed(error); 
}); 

mCompositeDisposable = new CompositeDisposable(); 
mCompositeDisposable.add(subscription); 
unsubscribeOnDestroy(mCompositeDisposable); 

Referenz: https://github.com/square/retrofit/issues/690 https://android.googlesource.com/platform/libcore/+/5d930ca/luni/src/main/java/android/system/GaiException.java

+0

sind mit RxJava2CallAdapterFactory als Adapter – mhdtouban

Antwort

7

hinzufügen onErrorReturn() an die Kette

.onErrorReturn((Throwable ex) -> { 
    print(ex); //examine error here 
    return ""; //empty object of the datatype 
}) 
.subscribe((String res) -> { 
    if(res.isEmpty()) //some condition to check error 
     return; 
    doStuff(res); 
});