Android 改装自定义错误处理程序+;同步及;asyc请求

Android 改装自定义错误处理程序+;同步及;asyc请求,android,retrofit,Android,Retrofit,我有一个自定义的错误处理程序,它检查reotherror它是否被传递,并将其作为自定义异常重新引用 private static ErrorHandler getErrorHandler() { return new ErrorHandler() { @Override public Throwable handleError(RetrofitError cause) { switch (cause.getKind()) {

我有一个自定义的错误处理程序,它检查
reotherror
它是否被传递,并将其作为自定义异常重新引用

private static ErrorHandler getErrorHandler() {
    return new ErrorHandler() {
        @Override
        public Throwable handleError(RetrofitError cause) {
            switch (cause.getKind()) {
                case NETWORK: return new NetworkException(cause);
                case HTTP: return new ApiException(cause);
                default: return cause;
            }
        }
    };
}
如果这是我的终点

@GET(USERS_GET_URL)
User getUsers() throws NetworkException, ApiException;
在执行同步请求时,我
尝试…捕获
并根据需要处理每个自定义异常。当使用异步方式完成时

@GET(USERS_GET_URL)
void getUsers(Callback<User> cb) throws NetworkException, ApiException;

可以看出,我的自定义异常正在被重新命名为
reformationerror
,这使我丢失了有价值的信息。是否有任何方法可以绕过异步请求的自定义错误处理?

错误处理程序中,您将原始
改型错误作为原因,从而导致
回调失败(改型错误)
以获得编写下一个代码所需的实际信息:
error.getCause().getCause()
。此错误将包含服务器随所有数据发送的响应

但错误处理程序是为同步请求创建的,在一些时间广场团队决定以这种方式缩小这一差距之后。有关更多信息,请阅读:

至于我,我不建议使用
ErrorHander
来实现异步方式,因为我找不到任何好的解决方案来处理不同类型的错误。从初始错误中获取正确的数据要容易得多

try {
  final ResponseWrapper wrapper = obtainResponse();
  callbackExecutor.execute(new Runnable() {
    @Override public void run() {
      callback.success((T) wrapper.responseBody, wrapper.response);
    }
  });
} catch (RetrofitError e) {
  Throwable cause = errorHandler.handleError(e);
  final RetrofitError handled = cause == e ? e : unexpectedError(e.getUrl(), cause);
  callbackExecutor.execute(new Runnable() {
    @Override public void run() {
      callback.failure(handled);
    }
  });
}