2016-12-24 219 views
1

我得到这个错误在我的日志:的java.net.UnknownHostException不能转换为retrofit2.adapter.rxjava.HttpException与RxJava

Caused by java.lang.ClassCastException: java.net.UnknownHostException cannot be cast to retrofit2.adapter.rxjava.HttpException 

和这就是我的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(); 
      } 

     } 
+0

把你的主机地址 –

+0

主机地址是有效的,它只是我觉得,当调用时有一个网络,但没有真正的联系。 –

回答

4

发生这种情况是因为您收到的java.net.UnknownHostException一个实例,而不是retrofit2.adapter.rxjava.HttpException。如果你看一下doc,它说:

  • 直体(例如,可观察)与反序列化机构2xx应答呼叫onNext与 HttpException非2XX响应和IOException异常网络调用的onError 错误
  • 响应包裹体(例如,可观察到>)调用onNext为所有HTTP响应的响应对象,并调用的onError 与IOException的网络错误
  • 结果包裹体(例如,可观察到>)配有一个结果对象用于调用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(); 
     } 
    } 
} 
+0

感谢您的回复,我会尝试并返回结果。 –

相关问题