xutils3网络请求结合下拉刷新事件处理缓存
2017-12-25 19:03
387 查看
框架地址:https://github.com/wyouflf/xUtils3
一般首页的数据往往加载都需要耗费很长的时间,所以有必要使用缓存来减少加载的时间。
在xutils3中进行网络请求一般只用两个方法
一个是
另一个是带缓存的
请求方法:
写法都相似,只不过带缓存的请求需要手动指定缓存过期时间。这里暂且设置为7天。
响应:
onCache方法就是对缓存结果的回调,默认返回false(不信任缓存)
也就是说就算在请求的时候设置了缓存,这里不处理也是无法缓存的。
在设置为ture后,
注意:不要在onSuccess中获取数据,如果在信任缓存的情况下,再次请求数据,不会进入该方法。也就拿不到数据。
还有个问题是如果想要通过刷新来重新获取数据,那么也需要在刷新的监听里将缓存设置为不信任
但是在进入界面的时候,注意不要调用自动刷新的方法,
首次进入页面之间绕过刷新,
信任缓存,这样能保证在用户每次进入页面的时候不用重复请求数据。
日志:
首次加载成功后进入:
失败
刷新再次加载(此时已经有了缓存)
关闭网络再加载
一般首页的数据往往加载都需要耗费很长的时间,所以有必要使用缓存来减少加载的时间。
在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)
相关文章推荐
- Android-Volley网络通信框架(二次封装数据请求和图片请求(包括处理请求队列和图片缓存))
- ImageLoader 单独封装(处理网络请求的图片,与默认图片、图片缓存’)
- RxJava结合Retrofit对网络请求结果的统一处理
- 【Swift】 GET&POST请求 网络缓存的简单处理
- 【Swift】 GET&POST请求 网络缓存的简单处理
- Android通过请求网络数据实现ListView,ListView的优化、图片的缓存、子控件的点击事件。
- iOS基础8:自定义MyData/自定义SQLite用于网络判断,版本判断,图片缓存处理,下载或者上传的GET或POST请求,加密手段,.数据解析
- 网络请求图片及缓存处理
- 微信小程序目录结构、事件处理、网络请求
- Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))
- 一. Volley简介 Volley的中文翻译为“齐射、并发”,是在2013年的Google大会上发布的一款Android平台网络通信库,具有网络请求的处理、小图片的异步加载和缓存等功能,能够帮助
- Android网络图片加载缓存处理库的使用
- Android网络请求缓存,本地数据缓存流程图
- 网络请求结合回调模式的简单案例
- .net 请求处理管道中的事件管理
- 在 swift中处理网络请求
- 网络处理1-异步GET请求
- 防止页面url缓存中ajax中post请求的处理方法
- Android RxJava与Retrofit与RecyclerView与Fresco结合网络请求
- libevent高性能网络库源码分析——事件处理框架(四)