У меня недостаточно знаний, чтобы сказать это с уверенностью, но я все еще думаю, что это имеет какое-то значение для вас, и оно слишком велико для комментария.
Вот что я думаю, что происходит. Когда onError
терпит неудачу, rx не будет проходить через тот же наблюдаемый поток. Вместо этого он распространит это на обработчик ошибок RxPlugins и в конечном итоге на обработчик исключений по умолчанию в вашей системе. Вы можете найти это здесь .
Это означает, что когда loginService.login(id)
выдает исключение в onError
, поток Completable
не сможет его перехватить и перенаправить на onError
внешней подписки. Другими словами, завершаемый поток не зависит от службы входа в систему.
Обычно вы хотите создать один отдельный поток и позволить модели представления подписаться на него. Если у вас более одного потока, у rx есть множество операторов, которые помогут вам их объединить. Попробуйте сделать так, чтобы репозиторий возвращал один поток из сервиса. Примерно так:
fun login(id) = loginService.login(id)
А теперь на модели представления вы можете проверить, был ли вызов успешным или нет, используя тот же метод - response.isNotSuccessful()