基于OkHttpUtils网络请求的二次封装(简单版)
2017-03-04 02:02
288 查看
为什么进行二次封装
1,减少代码量 2,后期换网络处理框架方便
二次封装的实现原理
1,将网络请求提取在一个方法中 2,对里面的可变参数,可以通过参数传递过去,也可以提供一个set方法传递过去 3,对于请求失败和成功,我们可以使用接口回调,让调用该方法的对象处理
封装后的网络处理类的功能
1,网络请求 2,xml数据转换成javaBean
每一个处理网络请求的ListView都要处理的3数据方法
1,初始化数据 2,下拉刷新数据 3,上拉加载数据
封装前的代码
/** * 3,加载更多 * 注意事项: * 请求成功数据更新之后,要关闭SpringView */ private void onDealLoadmore() { //资讯的网络请求地址 String newsUrl = Constant.NEWS_URL; //http://www.oschina.net/action/api/news_list?pageIndex=0&catalog=1&pageSize=20 //关闭SpringView mSpringView.onFinishFreshAndLoad(); //网络请求 OkHttpUtils .get() .url(newsUrl) .addParams("pageIndex", mCurrentPageIndex + "")//固定 .addParams("catalog", "1")//固定,1代表资讯 .addParams("pageSize", "20")//因为,一页加载20条数据 .build() .execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { Toast.makeText(mContext, "上拉加载失败", Toast.LENGTH_SHORT).show(); /* //关闭SpringView mSpringView.onFinishFreshAndLoad();*/ } @Override public void onResponse(String response, int id) { //请求成功,将字符串转为javaBean,并获取里面的泛型为News的集合 NewsList newsList = XmlUtils.toBean(NewsList.class, response.getBytes()); //对请求的数据进行非空判断 if (newsList != null) { List<News> list = newsList.getList(); if (list != null && list.size() > 0) { //数据的更新 mData.addAll(newsList.getList()); //适配器的更新 mMyNewsPagerAdapter.notifyDataSetChanged(); //请求页的索引要加1 ++mCurrentPageIndex; /* //关闭SpringView mSpringView.onFinishFreshAndLoad();*/ } } } }); }
封装后的代码
/** * 3,加载更多 * 注意事项: * 请求成功数据更新之后,要关闭SpringView */ private void onDealLoadmore() { mSpringView.onFinishFreshAndLoad(); mNewsPagerProtocol.setCurrentPageIndex(mCurrentPageIndex); mNewsPagerProtocol.loadData(new NewsPagerProtocol.Callback() { @Override public void onError(Call call, Exception e, int id) { Toast.makeText(mContext, "下拉刷新失败", Toast.LENGTH_SHORT).show(); } @Override public void onResponse(NewsList newsList, int id) { if (newsList != null) { //获取刷新的数据集合 List<News> list = newsList.getList(); //健壮性判断 if (list != null && list.size() > 0) { //更新数据集合 mData.addAll(list); //更新适配器 mMyNewsPagerAdapter.notifyDataSetChanged(); //更新页数的索引值 mCurrentPageIndex ++ ; } } } }); }
网络封装的代码
/** * Author: 归零 * Date: 2017/3/4 1:08 * Email: 4994766@qq.com * Description:网络请求和数据解析 */ public class NewsPagerProtocol { private int mCurrentPageIndex; public void setCurrentPageIndex(int currentPageIndex) { mCurrentPageIndex = currentPageIndex; } public void loadData(final Callback callback) { //资讯的网络请求地址 String newsUrl = Constant.NEWS_URL; //http://www.oschina.net/action/api/news_list?pageIndex=0&catalog=1&pageSize=20 //网络请求 OkHttpUtils .get() .url(newsUrl) .addParams("pageIndex", mCurrentPageIndex + "")//固定 .addParams("catalog", "1")//固定,1代表资讯 .addParams("pageSize", "20")//因为,一页加载20条数据 .build() .execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { //因为返回失败处理的请求不一样,所以不处理,交给调用的方法处理 callback.onError(call, e, id); } @Override public void onResponse(String response, int id) { //请求成功,将字符串转为javaBean,并获取里面的泛型为News的集合 NewsList newsList = XmlUtils.toBean(NewsList.class, response.getBytes()); //将转换后的数据通过接口回调,返回给调用方法的 callback.onResponse(newsList, id); } }); } public interface Callback { public void onError(Call call, Exception e, int id); public void onResponse(NewsList newsList, int id); } }
相关文章推荐
- 原生ajax请求二次封装
- react native 使用fetch进行网络请求(https),解决SSLHandshake问题,以及怎样进行二次封装
- iOS_21团购_通过block对请求工具类的代理方法进行二次封装
- Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))
- Android网络请求Retrofit进行二次封装,拿过来就能用
- android http——网络请求二次封装的框架设计
- Android-Volley网络通信框架(二次封装数据请求和图片请求(包括处理请求队列和图片缓存))
- Android基于OkHttpUtils网络请求的二次封装
- android基于开源网络框架asychhttpclient,二次封装为通用网络请求组件
- Android 中Volley二次封装并实现网络请求缓存
- volley请求的二次封装---StringRequest
- 结合AFNetworking 和 MJExtension的二次网络请求的封装
- android http——网络请求二次封装的框架设计
- Android网络请求框架AsyncHttp二次封装
- android基于开源网络框架asychhttpclient,二次封装为通用网络请求组件
- iOS安全之二次封装AFN并设置请求头/执行HTTPS加强安全
- Retrofit和RxJava网络请求二次封装
- iOS开发:GET与POST接口网络请求以及对AFNetworking的二次封装
- Android Okhttp3框架二次封装请求管理类
- iOS---对AFNetworking进行二次封装,使用单例单独处理网络请求数据