我需要从RetrofitError中捕获错误.下面是我使用的代码.
if (exception instanceof RetrofitError) {
RetrofitError retrofitError = (RetrofitError) exception;
m_tvStatus.setVisibility(View.VISIBLE);
String msg = "";
if (retrofitError.getResponse() != null) {
if (retrofitError.getResponse().getStatus() > 500) {
msg = "Network error HTTP ("
+ retrofitError.getResponse().getStatus() + ")";
if (retrofitError.getMessage() != null
&& !retrofitError.getMessage().isEmpty()) {
msg += ": " + retrofitError.getMessage();
}
}else if (retrofitError.getBody() == null) {
msg = exception.getMessage();
} else if (retrofitError.getCause() instanceof ConnectException) {
msg = getString(R.string.connection_error);
} else if (retrofitError.getCause() instanceof SocketTimeoutException) {
msg = getString(R.string.connection_timeout);
}
}else if (retrofitError.getKind() !=null){
if (retrofitError.getKind().name().equalsIgnoreCase("NETWORK"))
msg = getString(R.string.connection_timeout);
else
msg = getString(R.string.connection_error);
}
m_tvStatus.setText(msg);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是如何从RetrofitError.getKind()捕获消息.在我上面的代码中,我使用硬代码equalsIgnoreCase("NETWORK")来决定什么样的错误.
有没有更好的方法从RetrofitError.getKind()捕获错误消息?
Jak*_*ton 10
首先,getKind()永远不会null.它也是一个枚举,所以停止对它进行字符串比较!
处理此问题的适当方法是switch开启getKind()并采取适当行动.
switch (error.getKind()) {
case HTTP:
// TODO get message from getResponse()'s body or HTTP status
break;
case NETWORK:
// TODO get message from getCause()'s message or just declare "network problem"
break;
case CONVERSION:
case UNEXPECTED:
throw error;
default:
throw new AssertionError("Unknown error kind: " + error.getKind());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1643 次 |
| 最近记录: |