Я новичок в RxJava, поэтому, пожалуйста, простите меня, если это звучит слишком новичком: -).
На данный момент у меня есть абстрактный CallbackClass, который реализует обратный вызов Retofit. Там я улавливаю методы обратного вызова "onResponse" и "onError" и обрабатываю различные типы ошибок, прежде чем, наконец, переадресую пользовательские реализованные методы. Я также использую этот централизованный класс для ведения журнала запросов и ответов и других материалов.
Например: для конкретных кодов ошибок из моего сервера я получаю новый токен Auth в теле ответа, обновляю токен, а затем clone.enqueue вызов. Есть, конечно, несколько других глобальных действий для ответов с моего сервера.
Текущее решение (без 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();
}
Мой вопрос: есть ли способ иметь такое централизованное поведение обработки ответов, прежде чем, наконец, цепочка (или повторная попытка) вернется к методам подписчика?
Я нашел эти 2 ссылки, которые имеют хорошую отправную точку, но не конкретное решение. Любая помощь будет действительно оценена.
Принудительный запрос запроса после пользовательских исключений API в RxJava