Android基于OkHttpUtils网络请求的二次封装
OkHttpUtils网络请求为什么进行二次封装?
1、减少代码量
2、后期换网络处理框架方便
二次封装的实现原理
1、将网络请求提取在一个方法中
2、对里面的可变参数,可以通过参数传递过去,也可以提供一个set方法传递过去
3、对于请求失败和成功,我们可以使用接口回调,让调用该方法的对象处理
封装后的网络处理类的功能
1、网络请求
2、xml数据转换成javaBean
每一个处理网络请求的ListView都要处理的3数据方法
1、初始化数据
2、下拉刷新数据
3、上拉加载数据
封装前的代码
/** *3,加载更多 *注意事项: *请求成功数据更新之后,要关闭SpringView */ privatevoidonDealLoadmore(){ //资讯的网络请求地址 StringnewsUrl=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(newStringCallback(){ @Override publicvoidonError(Callcall,Exceptione,intid){ Toast.makeText(mContext,"上拉加载失败",Toast.LENGTH_SHORT).show(); /*//关闭SpringView mSpringView.onFinishFreshAndLoad();*/ } @Override publicvoidonResponse(Stringresponse,intid){ //请求成功,将字符串转为javaBean,并获取里面的泛型为News的集合 NewsListnewsList=XmlUtils.toBean(NewsList.class,response.getBytes()); //对请求的数据进行非空判断 if(newsList!=null){ Listlist=newsList.getList(); if(list!=null&&list.size()>0){ //数据的更新 mData.addAll(newsList.getList()); //适配器的更新 mMyNewsPagerAdapter.notifyDataSetChanged(); //请求页的索引要加1 ++mCurrentPageIndex; /*//关闭SpringView mSpringView.onFinishFreshAndLoad();*/ } } } }); }
封装后的代码
/** *3,加载更多 *注意事项: *请求成功数据更新之后,要关闭SpringView */ privatevoidonDealLoadmore(){ mSpringView.onFinishFreshAndLoad(); mNewsPagerProtocol.setCurrentPageIndex(mCurrentPageIndex); mNewsPagerProtocol.loadData(newNewsPagerProtocol.Callback(){ @Override publicvoidonError(Callcall,Exceptione,intid){ Toast.makeText(mContext,"下拉刷新失败",Toast.LENGTH_SHORT).show(); } @Override publicvoidonResponse(NewsListnewsList,intid){ if(newsList!=null){ //获取刷新的数据集合 Listlist=newsList.getList(); //健壮性判断 if(list!=null&&list.size()>0){ //更新数据集合 mData.addAll(list); //更新适配器 mMyNewsPagerAdapter.notifyDataSetChanged(); //更新页数的索引值 mCurrentPageIndex++; } } } }); }
网络封装的代码
/** *Author:归零 *Date:2017/3/41:08 *Email:4994766@qq.com *Description:网络请求和数据解析 */ publicclassNewsPagerProtocol{ privateintmCurrentPageIndex; publicvoidsetCurrentPageIndex(intcurrentPageIndex){ mCurrentPageIndex=currentPageIndex; } publicvoidloadData(finalCallbackcallback){ //资讯的网络请求地址 StringnewsUrl=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(newStringCallback(){ @Override publicvoidonError(Callcall,Exceptione,intid){ //因为返回失败处理的请求不一样,所以不处理,交给调用的方法处理 callback.onError(call,e,id); } @Override publicvoidonResponse(Stringresponse,intid){ //请求成功,将字符串转为javaBean,并获取里面的泛型为News的集合 NewsListnewsList=XmlUtils.toBean(NewsList.class,response.getBytes()); //将转换后的数据通过接口回调,返回给调用方法的 callback.onResponse(newsList,id); } }); } publicinterfaceCallback{ publicvoidonError(Callcall,Exceptione,intid); publicvoidonResponse(NewsListnewsList,intid); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。