目的是在用户会话令牌过期时自动刷新用户会话令牌,但如果返回的状态码与“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
}));