首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RxJava +针对应用编程接口调用改进-> BaseObservable以实现集中响应处理

RxJava +针对应用编程接口调用改进-> BaseObservable以实现集中响应处理
EN

Stack Overflow用户
提问于 2016-09-11 22:50:01
回答 2查看 4K关注 0票数 19

我是RxJava的新手,如果这听起来太新手,请原谅我:-)。

到目前为止,我有一个实现Retofit回调的抽象CallbackClass。在那里,我捕获回调的"onResponse“和"onError”方法,并处理各种错误类型,最后将其转发给自定义实现的方法。我还使用这个集中的类来处理请求/响应、应用程序日志记录和其他事情。

例如:对于来自我的服务器的特定错误代码,我在响应正文中收到一个新的Auth令牌,刷新该令牌,然后clone.enqueue调用。当然,对于来自我的服务器的响应,还有其他几个全局行为。

当前解决方案(不含Rx):

代码语言:javascript
复制
    public abstract void onResponse(Call<T> call, Response<T> response, boolean isSuccess);

    public abstract void onFailure(Call<T> call, Response<T> response, Throwable t, boolean isTimeout);

    @Override
    public void onResponse(Call<T> call, Response<T> response) {
        if (_isCanceled) return;

        if (response != null && !response.isSuccessful()) {
            if (response.code() == "SomeCode" && retryCount < RETRY_LIMIT) {
                TokenResponseModel newToken = null;
                try {
                    newToken = new Gson().fromJson(new String(response.errorBody().bytes(), "UTF-8"), TokenResponseModel.class);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                    SomeClass.token = newToken.token;
                    retryCount++;
                    call.clone().enqueue(this);
                    return;
                }
            }
        } else {
            onResponse(call, response, true);
            removeFinishedRequest();
            return;
        }

        onFailure(call, response, null, false);
        removeFinishedRequest();
    }

    @Override
    public void onFailure(Call<T> call, Throwable t) {
        if (_isCanceled) return;

        if (t instanceof UnknownHostException)
            if (eventBus != null)
                eventBus.post(new NoConnectionErrorEvent());

        onFailure(call, null, t, false);
        removeFinishedRequest();
    }

我的问题是:在最终链接(或重试)回subscriber方法之前,有没有办法让这种集中的响应处理行为?

我发现这两个链接都有一个很好的起点,但没有一个具体的解决方案。任何帮助都将不胜感激。

Forcing request retry after custom API exceptions in RxJava

Retrofit 2 and RxJava error handling operators

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39437299

复制
相关文章

相似问题

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