首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在retrofit 2+ rx-android上注册全局错误转换器?

如何在retrofit 2+ rx-android上注册全局错误转换器?
EN

Stack Overflow用户
提问于 2016-01-20 00:50:47
回答 1查看 1.3K关注 0票数 1

我的服务器在一切正常时返回域java对象,但在出现错误时返回ErrorResponse对象。(编辑:服务器返回http代码40x,以及包含错误信息的json body )如何在改进的2+ rx-android上注册全局错误转换器,以避免在每次调用时都做相同的事情?

目前我在每次调用时都是这样做的:

代码语言:javascript
复制
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)?

对如何实现这一点有什么想法吗?

这是个好主意吗?

EN

回答 1

Stack Overflow用户

发布于 2016-01-20 18:59:36

您可以使用的Observable的有趣方法很少。尤其是你应该看看这两个:

onErrorResumeNext(Func1 resumeFunction)

doOnError(Action1 onError)

而且由于我不认为(在您的示例中)需要另一个Observable来获得对流的控制,因此后者可能更适合您。

你可以做的就是创建一个类来包装你的错误的处理程序(比如这样):

代码语言:javascript
复制
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:

代码语言:javascript
复制
MyApiRx.doSomething(params)
  .subscribeOn(Schedulers.io())
  .doOnError(Response.handleError())
  .subscribe(response -> responseHandler());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34882453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档