2016-12-24 56 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

感謝您的回覆,我會嘗試並返回結果。 –

相關問題