Почему «doOnError» не работает до тех пор, пока «err -> {}» не передается в метод «subscribe ()» - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть следующая функция преобразования:

private MutableLiveData<ApiError> apiError = new MutableLiveData<>();
private MutableLiveData<ApiProgress> apiProgress = new MutableLiveData<>();
private CompositeDisposable compositeDisposable = new CompositeDisposable();

// Emit "progress's start" on subscribe and "progress's end" on after success or error.
// Add this to the observable action sequence with ".compose(baseTransformer())" before subscribe.
<T> SingleTransformer<T, T> baseTransformer() {
    return upstream -> upstream
            .doOnSubscribe(disposable -> {
                compositeDisposable.add(disposable);
                apiProgress.setValue(ApiProgress.start());
            })
            .doFinally(() -> apiProgress.setValue(ApiProgress.stop()))
            .doOnError(err -> {
                apiError.setValue(ApiError.create(err));
            });
}

, и я использую эту функцию здесь:

authRepository.login(userName, password)
            .compose(baseTransformer())
            .subscribe(login -> {
                loginData.setValue(login);
            });

Проблема: Мое приложение падает при попыткеавторизоваться. Решение

authRepository.login(userName, password)
            .compose(baseTransformer())
            .subscribe(login -> {
                loginData.setValue(login);
            }, err -> {});

Я не знаю, почему это решает проблему, поскольку "doOnError" не должен зависеть от этой лямбды ("err -> {}") для отлова ошибки.

Пожалуйста, предложите любую альтернативу.

...