Observer.onError disparando inconsistentemente
Estou usando o Retrofit para acessar minha API da seguinte maneira:
public interface UserService {
...
@POST("/user/login")
public Observable<User> register(@Body() User user);
}
Aqui está como eu acesso minha 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) {
....
}
});
Isso funciona perfeitamente bem, exceto quando há uma exceção (ou seja, IOException ou quando a conexão atinge o tempo limite), o método onError não é acionado; em vez disso, recebo uma exceção no thread principal que encerra meu aplicativo.
No entanto, em alguns casos (como quando a chamada da API responde com o código de status 400), o método onError é acionado conforme o esperado.
Depois de cavar a saída do logcat, localizei esta linha (não sei como devo lidar com isso)
rx.exceptions.OnErrorFailedException: ocorreu um erro ao tentar propagar o erro para Observer.onError
Alguém pode me informar onde estou fazendo as coisas de errado?