xutils3网络请求结合下拉刷新事件处理缓存

框架地址:https://github.com/wyouflf/xUtils3

一般首页的数据往往加载都需要耗费很长的时间,所以有必要使用缓存来减少加载的时间。

在xutils3中进行网络请求一般只用两个方法
一个是Callback.CommonCallback普通的网络请求
另一个是带缓存的Callback.CacheCallback网络请求

请求方法:


   //广告
    public static void homeViewFipper(Callback.CommonCallback<String> callback){
        RequestParams params = new RequestParams(MyURL.BaseUrl + "api/announcement");
        params.addHeader("X-Auth-Token", mHelper.getToken().toString());
        params.addHeader("Accept", "application/vnd.edusoho.v2+json");
        x.http().get(params, callback);
    }

    //数据
    public static void homeDatas(Callback.CacheCallback<String> callback) {
        RequestParams params = new RequestParams(MyURL.BaseUrl + "api/index");
        params.addHeader("X-Auth-Token", mHelper.getToken().toString());
        params.addHeader("Accept", "application/vnd.edusoho.v2+json");
        params.setCacheMaxAge(1000 * 60 * 60 * 7);
        x.http().get(params, callback);
    }

写法都相似,只不过带缓存的请求需要手动指定缓存过期时间。这里暂且设置为7天。

响应:

//不缓存
XNetWorkManager.homeViewFipper(new Callback.CommonCallback<String>() {

            @Override
            public void onSuccess(String s) {
                Type type = new TypeToken<List<FilpperBean>>() {
                }.getType();
                List<FilpperBean> filpperBeans = new Gson().fromJson(s, type);
                LogUtils.e(filpperBeans.toString());
                if (filpperBeans.size() == 0) {
                    mHomeVfRoot.setVisibility(View.GONE);
                    return;
                }
                for (int i = 0; i < filpperBeans.size(); i++) {
                    tv1.setText(filpperBeans.get(i).content);
                }
                mViews.add(moreView);
                mHomeVf.setViews(mViews);
            }

            @Override
            public void onError(Throwable throwable, boolean b) {

            }

            @Override
            public void onCancelled(CancelledException e) {

            }

            @Override
            public void onFinished() {

            }
        });
   //缓存首页数据
    private void getHomeDatas(final Boolean isRefresh) {
        XNetWorkManager.homeDatas(new Callback.CacheCallback<String>() {
            private Boolean errorCode = false;
            private String result = "";

            @Override
            public boolean onCache(String s) {
                this.result = s;
                return isRefresh;
            }

            @Override
            public void onSuccess(String s) {
                if (s != null) {
                    this.result = s;
                }
            }

            @Override
            public void onError(Throwable throwable, boolean b) {
                errorCode = true;
                mHomeRefresh.finishRefresh();
            }

            @Override
            public void onCancelled(CancelledException e) {

            }

            @Override
            public void onFinished() {
                mHomeRefresh.finishRefresh();
                if (!errorCode && result != null) {
                    LogUtils.e(result.toString());
                    jsonHomeList(result);
                }
            }
        });
    }

onCache方法就是对缓存结果的回调,默认返回false(不信任缓存)
也就是说就算在请求的时候设置了缓存,这里不处理也是无法缓存的。

在设置为ture后,
注意:不要在onSuccess中获取数据,如果在信任缓存的情况下,再次请求数据,不会进入该方法。也就拿不到数据。

还有个问题是如果想要通过刷新来重新获取数据,那么也需要在刷新的监听里将缓存设置为不信任

    @Override
    public void onRefresh(RefreshLayout refreshlayout) {
        mHomeTitle.setVisibility(View.INVISIBLE);
        getHomeDatas(false);
    }

但是在进入界面的时候,注意不要调用自动刷新的方法,
首次进入页面之间绕过刷新,

getHomeDatas(ture);

信任缓存,这样能保证在用户每次进入页面的时候不用重复请求数据。


日志:

首次加载成功后进入:

main, onSuccess(ClassFragments.java:250)

main, onFinished(ClassFragments.java:270)

失败

main, onError(ClassFragments.java:270)

刷新再次加载(此时已经有了缓存)

main, onCache(ClassFragments.java:227)
main, onSuccess(ClassFragments.java:250)
main, onFinished(ClassFragments.java:270)

关闭网络再加载

main, onError(ClassFragments.java:185)
main, onFinished(ClassFragments.java:270)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值