Ren*_*ens 2 android rx-java retrofit2
我在日志中收到此错误:
Caused by java.lang.ClassCastException: java.net.UnknownHostException cannot be cast to retrofit2.adapter.rxjava.HttpException
Run Code Online (Sandbox Code Playgroud)
那就是我的onError方法.设备没有连接时可能会导致错误.
@Override
public void onError(Throwable e) {
assert e != null;
Timber.d(e);
HttpException exception = (HttpException) e;
assert view != null;
view.hideRefreshSpinner();
if (exception.code() == HttpURLConnection.HTTP_BAD_REQUEST) {
view.showSnackbarInvalidError();
} else {
view.showUnauthorizedError();
}
}
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为您正在接收实例java.net.UnknownHostException而不是实例retrofit2.adapter.rxjava.HttpException.如果您查看该文档,它会说:
- 直接主体(例如,Observable)调用onNext,使用反序列化的主体进行2XX响应,并使用HttpException调用onError以获取非2XX响应,并使用IOException调用网络错误.
- 响应包装体(例如,Observable>)使用响应对象调用onNext以获取所有HTTP响应,并使用IOException调用onError以解决网络错误
- 结果包装体(例如,Observable>)调用onNext,并为所有HTTP响应和错误调用Result对象.
所以你收到网络错误.
也看到这个
您可以像这样包装代码:
@Override
public void onError(Throwable e) {
assert e != null;
Timber.d(e);
if (e instanceof HttpException) {
assert view != null;
view.hideRefreshSpinner();
if (((HttpException) e).code() == HttpURLConnection.HTTP_BAD_REQUEST) {
view.showSnackbarInvalidError();
} else {
view.showUnauthorizedError();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2434 次 |
| 最近记录: |