2015-03-25 50 views
0

我正在使用Retrofit庫。如果我沒有連接到互聯網,retrofit顯示消息我無法處理RetrofitError消息

無法連接到/192.168.0.***(端口8082):連接失敗: ENETUNREACH(網絡無法訪問)

這很好,但我沒有錯誤代碼從RetrofitError error。我可以處理此消息並替換我的消息嗎?

RetrofitError錯誤有方法getMeassage()並具有不getCode()

回答

1

你好,你可以處理改造錯誤。您可以自定義您的應用程序的消息。要處理Retrofit錯誤,您可以實現ErrorHandler的改進界面。例如請參閱下面的步驟。

步驟1.創建擴展Exception類的類,該類處理從ErrorHandler拋出的異常。我們將在接下來的步驟中看到課程。

public class AdvanceException extends Exception { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private String message = null; 

    public RelaxisException() { 
     super(); 
    } 

    public RelaxisException(String message) { 
     super(message); 
     this.message = message; 
    } 

    public RelaxisException(Throwable cause) { 
     super(cause); 
    } 

    @Override 
    public String toString() { 
     return message; 
    } 

    @Override 
    public String getMessage() { 
     return message; 
    } 
} 

步驟2.創建另一個擴展ErrorHandler的類。我們使用RestAdapter構建的setErrorHandler屬性來註冊這個類,這樣當改造引發異常時,這個類將處理該錯誤。

public class RetrofitErrorHandler implements ErrorHandler { 

    @Override 
    public Throwable handleError(RetrofitError retrofitError) { 
     if (retrofitError.getCause() instanceof ConnectException) { 
      return new AdvanceException(RApplication.getApplication().getResources().getString(R.string.lbl_no_internet_available)); 
     } else if (retrofitError.getCause() instanceof java.net.SocketTimeoutException) { 
      return new AdvanceException(RApplication.getApplication().getResources().getString(R.string.lbl_server_not_rechable)); 
     } else if (retrofitError.getCause() instanceof java.net.UnknownHostException) { 
      return new AdvanceException(RApplication.getApplication().getResources().getString(R.string.lbl_server_not_available)); 
     } else { 
      return new AdvanceException(RApplication.getApplication().getResources().getString(R.string.lbl_internal_problem)); 
     } 
    } 

} 

步驟3.下面是RestAdapter構建,我確定了錯誤處理程序的屬性。

mRestAdapter = new RestAdapter.Builder() 
.setLogLevel(RestAdapter.LogLevel.FULL) 
.setEndpoint(HOST_SERVER) 
.setErrorHandler(new RetrofitErrorHandler()) 
.build(); 

讓我知道如果你有任何問題試試這個,我希望能幫助你,謝謝。