我无法处理RetrofitError消息

时间:2015-03-25 05:22:35

标签: android retrofit

我正在使用Retrofit库。如果我未连接到互联网,retrofit会显示消息

  

无法连接到/192.168.0.***(端口8082):连接失败:   ENETUNREACH(网络无法访问)

这很好,但我没有来自RetrofitError error的错误代码。我可以处理此消息并替换我的消息吗?

RetrofitError错误的方法为getMeassage(),但没有getCode()

1 个答案:

答案 0 :(得分:1)

您好,您可以处理Retrofit Error。您可以自定义应用程序的消息。要处理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 Build,我确定了处理错误的属性。

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

如果您有任何问题,请告诉我,我希望能帮助您,谢谢。