我正在使用Retrofit库。如果我未连接到互联网,retrofit
会显示消息
无法连接到/192.168.0.***(端口8082):连接失败: ENETUNREACH(网络无法访问)
这很好,但我没有来自RetrofitError error
的错误代码。我可以处理此消息并替换我的消息吗?
RetrofitError错误的方法为getMeassage()
,但没有getCode()
答案 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();
如果您有任何问题,请告诉我,我希望能帮助您,谢谢。