我是 RxJava 新手,所以如果这听起来太新手,请原谅我:-)。
截至目前,我有一个实现 Retofit 回调的抽象 CallbackClass。在那里,我捕获了回调的“onResponse”和“onError”方法,并在最终转发到自定义实现的方法之前处理各种错误类型。
我还使用这个集中类来进行请求/响应应用程序日志记录和其他内容。
例如:对于来自我的服务器的特定错误代码,我在响应正文中收到一个新的身份验证令牌,刷新该令牌,然后将调用克隆入队列。
当然,我的服务器的响应还有其他几种全局行为。
当前解决方案(无 Rx):
public abstract void onResponse(Call<T> call, Response<T> response, boolean isSuccess);
public abstract void onFailure(Call<T> call, Response<T> response, Throwable t, boolean isTimeout);
@Override
public void onResponse(Call<T> call, Response<T> response) {
if (_isCanceled) return;
if (response != null && !response.isSuccessful()) {
if (response.code() == "SomeCode" && retryCount < RETRY_LIMIT) {
TokenResponseModel newToken = null;
try {
newToken = new Gson().fromJson(new String(response.errorBody().bytes(), "UTF-8"), TokenResponseModel.class);
} catch (Exception e) {
e.printStackTrace();
}
SomeClass.token = newToken.token;
retryCount++;
call.clone().enqueue(this);
return;
}
}
} else {
onResponse(call, response, true);
removeFinishedRequest();
return;
}
onFailure(call, response, null, false);
removeFinishedRequest();
}
@Override
public void onFailure(Call<T> call, Throwable t) {
if (_isCanceled) return;
if (t instanceof UnknownHostException)
if (eventBus != null)
eventBus.post(new NoConnectionErrorEvent());
onFailure(call, null, t, false);
removeFinishedRequest();
}
我的问题是:在最终链接(或重试)回订阅者方法之前,有什么方法可以实现这种集中式响应处理行为?
我发现这两个链接都有一个很好的起点,但没有具体的解决方案。任何帮助将不胜感激。
RxJava 中自定义 API 异常后强制请求重试 https://stackoverflow.com/questions/26919190/forcing-request-retry-after-custom-api-exceptions-in-rxjava?rq=1
Retrofit 2 和 RxJava 错误处理运算符 https://stackoverflow.com/questions/33740066/retrofit-2-and-rxjava-error-handling-operators