我是Rxjava
的{{1}}的新手,我正在寻求最好的正确方法来使用Retrofit
和rxjava
处理翻新中的所有可能状态,其中包括:
rxbinding
。Username or password is incorrect
。答案 0 :(得分:2)
每个重要的故障响应都有异常子类。
异常以Observable.error()
的形式传递,而值通过流的形式传递而没有任何包装。
1)没有互联网-ConnectionException
2)Null-仅NullPointerException
4)检查“错误请求”并抛出IncorrectLoginPasswordException
5)其他任何错误都只是NetworkException
您可以使用onErrorResumeNext()
和map()
来映射错误
例如
从Web服务中获取数据的典型改装方法:
public Observable<List<Bill>> getBills() {
return mainWebService.getBills()
.doOnNext(this::assertIsResponseSuccessful)
.onErrorResumeNext(transformIOExceptionIntoConnectionException());
}
确保响应正常的方法,否则抛出适当的异常
private void assertIsResponseSuccessful(Response response) {
if (!response.isSuccessful() || response.body() == null) {
int code = response.code();
switch (code) {
case 403:
throw new ForbiddenException();
case 500:
case 502:
throw new InternalServerError();
default:
throw new NetworkException(response.message(), response.code());
}
}
}
IOException表示没有网络连接,所以我抛出ConnectionException
private <T> Function<Throwable, Observable<T>> transformIOExceptionIntoConnectionException() {
// if error is IOException then transform it into ConnectionException
return t -> t instanceof IOException ? Observable.error(new ConnectionException(t.getMessage())) : Observable.error(
t);
}
为您的登录请求创建新方法,该方法将检查登录名/密码是否正确。
最后是
subscribe(okResponse -> {}, error -> {
// handle error
});