Мы пытаемся обработать ошибку, когда я получаю ответ от внешнего. Если ответ успешный, мы начинаем новое действие, с другой стороны, если ответ не увенчался успехом, мы вызываем метод onError.Начало деятельности внутри Rx Subscriber
У нас возникает ощущение, что мы не должным образом управляем жизненным циклом, потому что мы открываем новое мероприятие, наша подписка отменяется, поэтому мы не отменяем диалог должным образом. Следует ли хранить переменную во внутреннем классе абонента, чтобы запросить ее в onComplete, и в этом методе запускается новое действие? Или это аппроксимация достаточно хороша?
Subscriber<BackendResponse> subscriber = new Subscriber<BackendResponse>() {
@Override
public void onCompleted() {
progressDialog.dismiss();
}
@Override
public void onError(Throwable exception) {
progressDialog.dismiss();
SnackbarNotification.show(coordinatorLayout, "Error");
}
@Override
public void onNext(BackendResponse backendResponse) {
if (backendResponse.getSuccess()){
startActivity(new Intent(LoginActivity.this, HomeActivity.class));
} else {
onError(new Exception("Launch onError"));
}
}
};
Кроме того, правильно ли мы обрабатываем поток onError? Мы знаем, что при вызове onError из onNext он вызывает вызов Error и после этого вызова onComplete. Следует ли отказаться от подписки на метод onError?
Мы нашли оболочку для абонента:
public abstract class DefaultSubscriber<T> extends Subscriber<T> {
protected T result;
@Override
public void onCompleted() {
onSuccess(result);
}
@Override
public void onError(Throwable e) {
CustomLog.e("onError", e.getMessage());
onFailure(e);
}
@Override
public void onNext(T t) {
result = t;
}
protected abstract void onSuccess(T t);
protected abstract void onFailure(Throwable exception);
}
Делая так, мы сохраняем результат, предоставленную onNext в переменной-члена. Как только поток будет завершен (только одна итерация), мы вызываем onSuccess (результат) внутри onCompleted. С другой стороны, мы обрабатываем метод onError in onFailure. Что ты об этом думаешь? Мы что-то упускаем?