RetrofitError.getKind示例

Plu*_*gie 0 android retrofit

我需要从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)