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<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);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# OkHttpUtils
# 网络请求
# Android 网络请求框架解析之okhttp与okio
# Android OkHttp库简单使用和封装教程助你快速掌握网络请求技能
# 加载
# 回调
# 都要
# 可以通过
# 可以使用
# 提供一个
# 转换成
# 大家多多
# 后期
# 健壮性
# action
# net
# news_list
# api
# NEWS_URL
# Constant
# http
# oschina
# www
# pageIndex
相关文章:
网站app免费制作软件,能免费看各大网站视频的手机app?
黑客如何利用漏洞与弱口令入侵网站服务器?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
如何用AWS免费套餐快速搭建高效网站?
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何在IIS中新建站点并解决端口绑定冲突?
开封网站制作公司,网络用语开封是什么意思?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何选择适配移动端的WAP自助建站平台?
如何配置支付宝与微信支付功能?
建站之星收费标准详解:套餐费用及年费价格表一览
h5网站制作工具有哪些,h5页面制作工具有哪些?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
如何在云服务器上快速搭建个人网站?
,柠檬视频怎样兑换vip?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
小型网站制作HTML,*游戏网站怎么搭建?
建站主机功能解析:服务器选择与快速搭建指南
深圳网站制作案例,网页的相关名词有哪些?
如何安全更换建站之星模板并保留数据?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
北京网站制作的公司有哪些,北京白云观官方网站?
如何通过VPS建站实现广告与增值服务盈利?
c# 在ASP.NET Core中管理和取消后台任务
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
制作电商网页,电商供应链怎么做?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
太原网站制作公司有哪些,网约车营运证查询官网?
定制建站策划方案_专业建站与网站建设方案一站式指南
打鱼网站制作软件,波克捕鱼官方号怎么注册?
如何在景安云服务器上绑定域名并配置虚拟主机?
如何配置IIS站点权限与局域网访问?
建站之星2.7模板快速切换与批量管理功能操作指南
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
网站制作价目表怎么做,珍爱网婚介费用多少?
宝塔建站助手安装配置与建站模板使用全流程解析
威客平台建站流程解析:高效搭建教程与设计优化方案
如何快速搭建高效WAP手机网站?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
网站微信制作软件,如何制作微信链接?
浅析上传头像示例及其注意事项
如何通过网站建站时间优化SEO与用户体验?
如何在Golang中使用replace替换模块_指定本地或远程路径
如何解决VPS建站LNMP环境配置常见问题?
官网网站制作腾讯审核要多久,联想路由器newifi官网
建站之星伪静态规则如何设置?
装修招标网站设计制作流程,装修招标流程?
*请认真填写需求信息,我们会在24小时内与您取得联系。