Android 改装服务器的错误处理

Android 改装服务器的错误处理,android,retrofit,android-networking,Android,Retrofit,Android Networking,只是捆绑改装,这是伟大的。我不想发明新东西,所以有没有办法处理failure()中所有可能的错误。 或者唯一的方法是检查所有状态,例如显示对话框 @Override public void failure(RetrofitError error) { } 我在网上遇到了一个自定义错误处理程序(gist),它肯定会对您有所帮助 您可以通过实现ErrorHandler接口来创建自定义错误处理程序。然后,可以使用rest适配器生成器的setErrorHandler(自定义错误处理程序)

只是捆绑改装,这是伟大的。我不想发明新东西,所以有没有办法处理
failure()
中所有可能的错误。 或者唯一的方法是检查所有状态,例如显示对话框

 @Override
  public void failure(RetrofitError error) {

  }

我在网上遇到了一个自定义错误处理程序(gist),它肯定会对您有所帮助


您可以通过实现ErrorHandler接口来创建自定义错误处理程序。然后,可以使用rest适配器生成器的setErrorHandler(自定义错误处理程序)方法在rest适配器上设置此设置

如果您构建您的适配器,您将看到它具有包含自定义错误处理程序的选项。要使用的方法是
.setErrorHandler(errorHandler)

因此,您可以创建以下类,并以上述方式将其附加到改装生成器:

public class ErrorUtil implements ErrorHandler {


    public ErrorUtil() {

    }

    public Throwable handleError(RetrofitError cause) {
        String errorDescription = null;
        Log.e("NON FATAL ERROR: ", cause.getLocalizedMessage());

        if (cause.getKind().equals(RetrofitError.Kind.NETWORK)) {
            if (!isNetworkAvailable()) {
                errorDescription = ErrorConstants.ERROR_CONNECTION_OFFLINE;
            } else if (cause.getMessage().contains("Unable to resolve host") || cause.getMessage().contains("Invalid sequence") || cause.getMessage().contains("Illegal character") || cause.getMessage().contains("was not verified")) {
                errorDescription = ErrorConstants.ERROR_UNABLE_TO_RESOLVE_HOST;
            } else if (cause.getLocalizedMessage().contains("timeout") || cause.getLocalizedMessage().contains("timed out") || cause.getLocalizedMessage().contains("failed to connect")) {
                errorDescription = ErrorConstants.ERROR_CONNECTION_TIMEOUT;
            } else if (cause.getLocalizedMessage().equals("Connection closed by peer") || cause.getLocalizedMessage().equals("host == null") || cause.getLocalizedMessage().contains("CertPathValidatorException")) {
                errorDescription = ErrorConstants.ERROR_UNABLE_TO_RESOLVE_HOST;
            } else {
                errorDescription = ErrorConstants.ERROR_NETWORK;
            }
        } else if (cause.getKind().equals(RetrofitError.Kind.CONVERSION)) {
            errorDescription = ErrorConstants.ERROR_JSON_RESPONSE_CONVERSION;
        } else if (cause.getResponse() == null) {
            errorDescription = ErrorConstants.ERROR_NO_RESPONSE;
        } else {
            errorDescription = ErrorConstants.ERROR_UNKNOWN;
        }
        Log.d("ERRORUTILReturn", errorDescription);
        return new Exception(errorDescription);
    }
很抱歉发布了一堆代码,但这是我们用来从改造错误处理程序中获取人类可读的错误格式的解决方案。您可以对此进行编辑,以更好地匹配错误集。我们还将错误消息本地化到错误处理程序类中

然后,只需使用以下内容,就可以向用户显示一个可读性好的错误格式:

@Override
  public void failure(RetrofitError error) {
error.getLocalizedMessage();
  }