Android基于OkHttpUtils网络请求的二次封装
发布时间 - 2026-01-10 23:25:50 点击率:次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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
bootstrap日历插件datetimepicker使用方法
如何在七牛云存储上搭建网站并设置自定义域名?
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
动图在线制作网站有哪些,滑动动图图集怎么做?
如何在VPS电脑上快速搭建网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
高防服务器如何保障网站安全无虞?
香港网站服务器数量如何影响SEO优化效果?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
如何快速查询域名建站关键信息?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
Laravel如何实现本地化和多语言支持?(i18n教程)
javascript基于原型链的继承及call和apply函数用法分析
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
IOS倒计时设置UIButton标题title的抖动问题
Windows Hello人脸识别突然无法使用
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
利用JavaScript实现拖拽改变元素大小
MySQL查询结果复制到新表的方法(更新、插入)
什么是javascript作用域_全局和局部作用域有什么区别?
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
香港服务器选型指南:免备案配置与高效建站方案解析
如何为不同团队 ID 动态生成多个非值班状态按钮
网站建设要注意的标准 促进网站用户好感度!
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
如何选择PHP开源工具快速搭建网站?
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
免费视频制作网站,更新又快又好的免费电影网站?
微信推文制作网站有哪些,怎么做微信推文,急?
Laravel如何创建自定义Artisan命令?(代码示例)
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
如何在Windows 2008云服务器安全搭建网站?
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
iOS验证手机号的正则表达式
如何制作一个表白网站视频,关于勇敢表白的小标题?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何确保FTP站点访问权限与数据传输安全?
Laravel PHP版本要求一览_Laravel各版本环境要求对照
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?

