rx-java - 处理 Rxjava 2 中的网络错误 - Retrofit 2

标签 rx-java retrofit2 okhttp okhttp3 rx-java2

我们如何处理 Rxjava2 中的不同网络错误?

我们过去常常使用 Rxjava 1 检查 throwable 的实例是否是 IOException 或 HttpException,但是,在 RxJava 2 中,throwable 错误的类型是 GaiException .

代码片段

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);

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

最佳答案

添加 onErrorReturn() 到链

.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);
});

关于rx-java - 处理 Rxjava 2 中的网络错误 - Retrofit 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41379815/

相关文章:

java - 如何创建 2 个 zip 并合并可观察值?

rx-java - 链接具有不同发射类型的多个可观察量

android - RxJava sample() 是 CPU 密集型的

java.lang.IllegalArgumentException : FormUrlEncoded can only be specified on HTTP methods with request body (e. g., @POST)

java - 如何使 Observable 在 1 秒的时间间隔后发出字符

java - NoClassDefFoundError : Failed resolution of: Lokhttp3/internal/Platform

java - 使用 Firebase 改造帖子

android - 取消或覆盖在 Espresso 测试下的 Activity 中进行的 API 调用

android - okhttp 多部分登录拦截器

java - Gradle 错误 - 无法下载 okhttp.jar 文件 2.7.2