我的日志中出现此错误:
Caused by java.lang.ClassCastException: java.net.UnknownHostException cannot be cast to retrofit2.adapter.rxjava.HttpException
这就是我的方法。该错误可能是由于设备没有连接造成的。
@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();
}
}
最佳答案
这是因为您正在接收一个java.net.UnknownHostException
而不是retrofit2.adapter.rxjava.HttpException
的实例。如果你看看doc,它会说:
直接body(例如,observate)调用onnext和反序列化body以获得2xx响应,并调用onerror
非2xx响应的httpexception和网络的ioexception
错误。
响应包装体(例如,observate>)调用onnext,其中包含所有http响应和调用onerror的响应对象
网络错误的IOException
result wrapped body(例如,observate>)使用result对象调用onnext以获取所有http响应和错误。
所以你收到一个网络错误。
另请参见this
您可以这样包装代码:
@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();
}
}
}