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);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。