Я использую Retrofit для доступа к моему API следующим образом:
public interface UserService {
...
@POST("/user/login")
public Observable<User> register(@Body() User user);
}
Вот как я получаю доступ к своему API:
mUserService.register(user)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<User>() {
@Override
public void onCompleted() {
....
}
@Override
public void onError(Throwable e) {
....
}
@Override
public void onNext(User user) {
....
}
});
Это работает отлично, за исключением случаев, когда возникает исключение (например, IOException или время ожидания соединения), метод onError не запускается, вместо этого я получаю исключение в основном потоке, которое завершает мое приложение.
Однако в некоторых случаях (например, когда вызов API отвечает кодом состояния 400) метод onError запускается, как и ожидалось.
После копания вывода logcat я заметил эту строку (не знаю, как я должен с этим бороться)
rx.exceptions.OnErrorFailedException: произошла ошибка при попытке передать ошибку в Observer.onError
Может ли кто-нибудь сообщить мне, где я делаю что-то неправильно?