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);
}
});
}