【发布时间】:2015-03-25 05:22:34
【问题描述】:
我正在使用 Retrofit 库。如果我没有连接到互联网,retrofit 显示消息
无法连接到 /192.168.0.***(端口 8082):连接失败: ENETUNREACH(网络不可达)
很好,但我没有来自RetrofitError error 的错误代码。我可以处理此消息并替换我的消息吗?
RetrofitError 错误有方法getMeassage() 而没有getCode()
【问题讨论】:
我正在使用 Retrofit 库。如果我没有连接到互联网,retrofit 显示消息
无法连接到 /192.168.0.***(端口 8082):连接失败: ENETUNREACH(网络不可达)
很好,但我没有来自RetrofitError error 的错误代码。我可以处理此消息并替换我的消息吗?
RetrofitError 错误有方法getMeassage() 而没有getCode()
【问题讨论】:
您好,您可以处理改造错误。您可以为您的应用程序自定义消息。要处理 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();
如果您有任何问题,请告诉我,希望对您有所帮助,谢谢。
【讨论】: