【问题标题】:I can not process RetrofitError message我无法处理 RetrofitError 消息
【发布时间】:2015-03-25 05:22:34
【问题描述】:

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

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

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

RetrofitError 错误有方法getMeassage() 而没有getCode()

【问题讨论】:

    标签: android retrofit


    【解决方案1】:

    您好,您可以处理改造错误。您可以为您的应用程序自定义消息。要处理 Retrofit 错误,您可以实现接口 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();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2021-10-04
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多