我的服务器在一切正常时返回域java对象,但在出现错误时返回ErrorResponse对象。(编辑:服务器返回http代码40x,以及包含错误信息的json body )如何在改进的2+ rx-android上注册全局错误转换器,以避免在每次调用时都做相同的事情?
目前我在每次调用时都是这样做的:
MyApiRx.doSomething(params)
.subscribeOn(Schedulers.io())
.subscribe(response -> responseHandler(),
throwable -> {
HttpException err = (HttpException) throwable;
Converter<ResponseBody, ErrorResponse> ec = retrofit.responseConverter(ErrorResponse.class, new Annotation[]{});
ErrorResponse errorResponse = ec.convert(err.response().errorBody());
});也许我应该写一个自定义的CallAdapterFactory来自动处理这个问题,并返回一个带有onError(ErrorResponse err)的观察值,而不是股票的onError(Throwable t)?
对如何实现这一点有什么想法吗?
这是个好主意吗?
发布于 2016-01-20 18:59:36
您可以使用的Observable的有趣方法很少。尤其是你应该看看这两个:
onErrorResumeNext(Func1 resumeFunction)
doOnError(Action1 onError)
而且由于我不认为(在您的示例中)需要另一个Observable来获得对流的控制,因此后者可能更适合您。
你可以做的就是创建一个类来包装你的错误的处理程序(比如这样):
public static class Response {
private static final Action1<Throwable> ERROR_HANDLER = new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
HttpException err = (HttpException) throwable;
Converter<ResponseBody, ErrorResponse> ec = retrofit.responseConverter(ErrorResponse.class, new Annotation[]{});
ErrorResponse errorResponse = ec.convert(err.response().errorBody());
}
};
public static Action1<Throwable> handleError() {
return ERROR_HANDLER;
}
}然后使用以下命令调用您的api:
MyApiRx.doSomething(params)
.subscribeOn(Schedulers.io())
.doOnError(Response.handleError())
.subscribe(response -> responseHandler());https://stackoverflow.com/questions/34882453
复制相似问题