我的日志中出现此错误:

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();
        }
    }
}

09-26 05:40