Rxjava 2 - retryWhen / onErrorResumeNext在调用Observable.error()时崩溃应用程序showig一个CompositeException

时间:2017-12-22 15:59:02

标签: android retrofit2 rx-java2

目的是在用户会话令牌过期时自动刷新用户会话令牌,但如果返回的状态码与“205”不同,则会崩溃应用程序。

我的猜测是由于递归调用导致崩溃,“Observable.error()”应该打破retryWhen并直接进入“onError”实现。相反,它正在崩溃应用程序。

显示的异常是CompositeException:

io.reactivex.exceptions.CompositeException: 2 exceptions occurred.

这是源代码:

observable.retryWhen(retryHandler -> retryHandler.flatMap(error -> {
        boolean isSessionExpired = false;
        if (error instanceof RetrofitException) {
            ErrorResponseModel errorResponseModel = ((RetrofitException) error).getErrorBodyAs(ErrorResponseModel.class);

            if (errorResponseModel != null)
                isSessionExpired = "205".equals(errorResponseModel.getCode()); // Check if Token Expired
        }

        if (isSessionExpired)
            return _refreshSession().flatMap(s -> observable);
        else
            return (ObservableSource) Observable.error(error); // For anything else, don't retry
    }));

0 个答案:

没有答案