如何在Android使用OkHttpUtils实现二次封装
如何在Android使用OkHttpUtils实现二次封装?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

员工经过长期磨合与沉淀,具备了协作精神,得以通过团队的力量开发出优质的产品。创新互联坚持“专注、创新、易用”的产品理念,因为“专注所以专业、创新互联网站所以易用所以简单”。公司专注于为企业提供成都做网站、成都网站设计、微信公众号开发、电商网站开发,小程序开发,软件按需定制设计等一站式互联网企业服务。
OkHttpUtils为什么进行二次封装?
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 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 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);
}
}关于如何在Android使用OkHttpUtils实现二次封装问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
本文名称:如何在Android使用OkHttpUtils实现二次封装
网站网址:http://www.jxjierui.cn/article/ghsjsp.html


咨询
建站咨询
