RxJava + Retrofit -> BaseObservable для вызовов API для централизованной обработки ответов
Я новичок в RxJava, поэтому, пожалуйста, прости меня, если это звучит слишком новичок :-).
На данный момент у меня есть абстрактный CallbackClass, который реализует Retofit Callback. Там я перехватываю методы Callback «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