网络请求是大多数应用不可获取的一部分,曾经和一个其他公司的团队一起开发,他们网络请求就是不断的写handler,代码分到了各个地方,我根本读不通
网络请求本身很简单的,写过js的都知道jquery中的ajax都很简单
不吐槽了我们开始
DhNet net=new DhNet("路劲"); net.addParam("key", "参数") .addParam("key2", "参数2"); .doGet(new NetTask(this) { @Override public void doInUI(Response response, Integer transfer) { //处理返回结果 } });
上面是最常用的使用方法
创建一个dhnet对象 dhnet对象大多数方法是支持链式操作;
添加参数addParam的值可以为任意对象,如果非空会调用toString方法,
如果参数为为textview或其子类或调用方法getText().toString();
get或method
可以调用
net.setMethod("get或post") 或者 net.doGet(new NetTask(this){xxx}); net.doPost(new NetTask(this){xxx})
关于对话框
net.doGetInDialog(new NetTask(this) {xxx});//get同时打开一个对话框 net.doPostInDialog(new NetTask(this) {xxx});//post同时打开一个对话框 net.doGet(true, new NetTask(this) {xxx});//第一个参数是否显示对话框
对话框中的文字默认get时为 加载中...,post是为提交中...
如果想重写
net.setDialogerMsg("对话框信息");
下面看NetTask回调类
主要的几个方法
//当发生错误时回调这个回调是在UI线程中 public void onErray(Response response) //返回数据后会现在后台处理 public void doInBackground(Response response1) //最后会在ui线程处理 public void doInUI(Response response, Integer transfer)
有事在doInBackground处理过程中就需要处理UI这时可以
//在doInBackground添加代码 public void doInBackground(Response response) { super.doInBackground(response); //在response中添加传递的对象 response.addBundle("key", "对象传递"); //传递到UI,第二个参数为自定义编码 transfer(response, 100); } //在doInUI中 public void doInUI(Response response, Integer transfer) { if(transfer==100){ //获取传递的对象 Object obj=response.getBundle("key") } }
下面来看response对象
response对象指返回的数据
response方法很多
String res=response.plain()//可以获取网络访问的纯文本
当然我们基本网络访问都是json
JSONObject jo=response.jSON()//可以返回网络访问的json对象
网络默认最佳返回格式,当然不是必须的
{ success:true, msg:'消息内容', code:'error' data:{} }
对应的配置
下面是Const中的配置你可以进行覆盖
public class Const{ public static String response_success = "success";//成功与否 public static String response_msg = "msg";//消息文本 public static String response_data = "data";//数据对象 public static String response_total = "total";//暂时没用 public static String response_current = "current";//暂时没用 public static String response_code = "code";//错误code }
有了这些后
//假设返回的结果 {success:true, data:{ user:{ id:1212, name:'tengzhinei' } }, articles:[ {id:1}, {id:2} ] } //json处理 boolean success=response.isSuccess();//是否成功, JSONObject jo = response.jSONFromData();//获取data节点下的对象 JSONObject data = response.jSONFrom("data");;//获取data节点下的对象 JSONObject user = response.jSONFrom("data.user");//获取data.user节点下的对象 JSONArray array = response.jSONArrayFrom("data.articles");//获取data.articles节点下的数组 //也可以直接将json转为bean User user = response.modelFrom("data.user");//可以直接获取到user对象(这边使用了泛型) List<Article> articles = response.listFrom(User.class, "data.articles")//获取对象数组
response 很强大吧
这里在顺便说一下ViewUtil 和JSONUtil
下面是我喜欢使用的数据绑定方法
ViewUtil.bindView(findViewById(R.id.time), JSONUtil.getLong(jo, "time"),"time"); //第一个参数view 可以为textview或其子类 ,imageView//如果是imageview 如果第二个参数是字符串会自动下载图片,如果是drawable,bitmap,int或获取直接绑定图片 //第二个数 数据 //第三个数 数据修饰 //这里将数据修饰为时间类型,具体修饰问题在后面讲adapter再讲吧
继续,说过dhnet自带强大的网络缓存下面就说怎么使用吧
DhNet net=new DhNet(); net.setUrl("http://youxianpei.c.myduohuo.com/mobile_index_adbjsonview?id=63&temp=cache_net_error"); //看这里使用缓存策略 net.useCache(CachePolicy.POLICY_ON_NET_ERROR); net.doGet(new NetTask(getActivity()) { @Override public void doInUI(Response response, Integer transfer) { resultV.setText(response.plain()); //response有方法判断这次结果是不是缓存 if (!response.isCache()) { dialoger.showToastShort(getActivity(), "这次访问不是使用的缓存,断开网络试试看"); }else{ dialoger.showToastShort(getActivity(), "网络访问失败,这次使用的是缓存"); } } });
net.useCache(CachePolicy.XXX);//就可以添加缓存策略了
现在有的缓存策略
//不使用缓存
POLICY_NOCACHE;
//只使用缓存
POLICY_CACHE_ONLY;
//先使用缓存,然后获取但是获取的数据只会缓存起来
POLICY_CACHE_AndRefresh;
//当网络不好时,才会使用缓存
POLICY_ON_NET_ERROR;
//先使用缓存,然后获取,获取后会再使用
POLICY_BEFORE_AND_AFTER_NET;
这些缓存策略都好理解,唯一需要说的POLICY_BEFORE_AND_AFTER_NET
其他策略的doInBackground和doInUI只会被回调一次
但是POLICY_BEFORE_AND_AFTER_NET
doInBackground和doInUI 可能 会被回调两次,一次是上次缓存(如果上次没缓存当然不会回调),一次真正的网络获取的数据
//网络缓存简单吧
在告诉大家一个秘籍
Const.net_error_try=true;
如果这个值被设为true,在doInBackground和doInUI中发生的错误都会被try-catch掉主要是项目上线后,
项目开发过程中还是false 吧
下面文件上传
DhNet net=new DhNet("路径"); net.addParam("key1", "参数1") .addParam("key2", "参数2").upload("文件参数名", file, new NetTask(this) { @Override public void doInUI(Response response, Integer transfer) { if (response.isSuccess()) { Boolean uploading = response.getBundle("uploading"); if (!uploading) { //上传完成 }else{ //已上传大小 long length= response.getBundle("length"); //文件总大小 long total= response.getBundle("total"); } } } });
//上面的代码就是文件上传了,主要就是使用upload方法
在doInUI会被多次回调用来处理进度,response中有uploading,length,total三个参数用来判断进度
最后文件下载
//文件下载需要注入 @Inject DownLoadManager downloader; //启动下载 downloader.download("任务编码","路劲",params,"本地保存路径");//第三个参数附加参数 //注册下载监听 downloader.regeisterCallBack("任务编码",downLoadCallBack); //取消下载监听 downloader.unregeisterCallBack("任务编码");
可以在activity的onResume监听,onStop中取消监听 特别是一些需要在listview 中显示下载进度的
关于同步网络访问,这些不说
NetUtil.sync(url, method, params);
NetUtil.syncStream(url, method, params);
再底层
HttpManager.execute(HttpGet);
Dhnet 网络就这些东西,基本涉及到网络的方方面面
相关推荐
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
内容概要:本文档提供了关于数据分析全面的知识介绍与实战资源链接。首先,在数据分析的基础教程部分讲述了使用Python以及R两种语言来进行实际的数据分析工作所需具备的各项基本技能。其次,进阶教程涵盖从机器学习到深度学习的概念及其Python具体应用场景。接着,在工具有效利用层面介绍了多种热门库与平台的作用特点。在项目实践中,列举了四个实战案例:Titanic幸存者预测、房价预测、社交媒体情感倾向分析以及市场顾客购买模式研究,每个项目都有详细的技术流程指引。另外列出多个外部网站资源供进一步提升学习。 适用人群:本文主要面向有志于从事数据挖掘工作的学生和技术爱好者,同时也可辅助在职人士自我能力进阶。无论是在学术科研还是实际业务需求环境中都值得研读。 使用场景及目标:学习者将能够获取到系统的理论知识体系,熟悉业界主流软件包的功能优势,掌握具体业务问题解决方案路径,提高自身的综合技术素质,从而为个人职业规划增添竞争力。 其他说明:文档里推荐了不少高质量参考资料和实用线上学习社区,能有效补充专业知识空白并促进社交协作交流。
从埃安泰国工厂竣工看中国车企加快海外建厂步伐.pptx
复现改进的L-SHADE差分进化算法求解最优化问题详解:附MATLAB源码与测试函数集,复现改进的L-SHADE差分进化算法求解最优化问题详解:MATLAB源码与测试集全攻略,复现改进的L-SHADE差分进化算法求最优化问题 对配套文献所提出的改进的L-SHADE差分进化算法求解最优化问题的的复现,提供完整MATLAB源代码和测试函数集,到手可运行,运行效果如图2所示。 代码所用测试函数集与文献相同:对CEC2014最优化测试函数集中的全部30个函数进行了测试验证,运行结果与文献一致。 ,复现; 改进的L-SHADE差分进化算法; 最优化问题求解; MATLAB源代码; 测试函数集; CEC2014最优化测试函数集,复现改进L-SHADE算法:最优化问题的MATLAB求解与验证
可选择参考电压与输出电压 可选择电阻精度以及输出电压误差值
西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional V14及更高版本的应用探索,西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional画面与V14及以上版本技术参考,西门子1200博途三部十层电梯程序案例,加Wincc RT Professional画面三部十层电梯程序,版本V14及以上。 程序仅限于参考资料使用。 ,西门子;1200博途;三部十层电梯程序案例;Wincc RT Professional;V14以上程序版本。,西门子V14+博途三部十层电梯程序案例:Wincc RT Pro专业画面技术解析
2023政务大数据解决方案.pptx
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
内容概要:本文介绍了基于Java的学业跟踪评价系统的详细设计与实现,涵盖系统的多维度数据整合与评价、智能化学习建议、数据可视化和实时反馈等方面。系统通过收集课堂表现、作业成绩、考试成绩等多源数据,对学生的学业表现进行全面跟踪和评价,提供可视化反馈以及个性化的学习建议,促进家校互动,助力学生全面素质提升和发展。 适合人群:具备一定Java编程经验的研究者和开发者,特别是从事教育信息化领域的从业人员和技术爱好者。 使用场景及目标:该系统主要用于K12教育阶段、高等教育以及其他涉及教育培训的场景。其目的是提高教育管理效率、推进教育数字化转型和个人化教育实施。 其他说明:该文档详细介绍了系统的设计思路、功能模块和技术细节,并提供了完整的程序代码以及GUI设计说明。对于希望深入了解或实际部署学业跟踪评价系统的机构非常有参考价值。文中强调技术创新与实践经验相结合,突出了实用性和前瞻性特点。
项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
erlang安装包,rabbmit安装环境
linux 下的oracle数据库的开机启动脚本,将里面的/home/oracle/app/oracle/product/11.2.0/dbhome_1 都改成你的oracle数据库的路径。在root用户下chmod +x 添加执行权限,然后./oracle_setup.sh 执行即可。
基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实现与初级应用,基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实践:初级拉格朗日算法应用,GAMS代码:基于目标级联分析法的多微网主动配电系统自治优化经济调度 该代码并非完全复现该文献,而是参照文献 《基于目标级联分析法的多微网主动配电系统自治优化经济调度》 的目标级联分析法(ATC)的算法部分,采用初级的拉格朗日算法,主网与配网部分模型较为简化。 代码结构完整,注释详细,可读性较强,可以在此基础上进行修改或者移植。 适用于初学者学习ATC模型 ,GAMS代码;目标级联分析法(ATC);微网主动配电系统;自治优化经济调度;拉格朗日算法;主网与配网模型简化;代码结构完整;注释详细;可读性强;初学者学习ATC模型。,基于ATC算法的GAMS多微网经济调度优化代码:简化版学习指南
基于ISODATA改进算法的负荷场景曲线聚类——适用于风光场景生成的高效算法创新,基于ISODATA改进算法的负荷场景曲线聚类(适用于风光场景生成,包含K-means等多种聚类方法与效果评价),基于ISODATA改进算法的负荷场景曲线聚类(适用于风光场景生成) 摘要:代码主要做的是一种基于改进ISODATA算法的负荷场景曲线聚类,代码中,主要做了四种聚类算法,包括基础的K-means算法、ISODATA算法、L-ISODATA算法以及K-L-ISODATA算法,并且包含了对聚类场景以及聚类效果的评价,通过DBI的计算值综合对比评价不同方法的聚类效果,程序实现效果非常好,适合对于算法创新有需求的人,且也包含基础的k-means算法,用来学习也非常棒 另外,此代码同样适用于风光场景生成,自己准备好风光场景数据即可 代码非常精品,有部分注释; ,核心关键词: 1. 基于ISODATA改进算法 2. 负荷场景曲线聚类 3. K-means算法 4. 聚类场景评价 5. 聚类效果评价 6. DBI计算值 7. 算法创新需求 8. 风光场景生成 以上关键词用分号分隔为: 1. 基于ISO
xPack qemu arm 是一款高性能且跨平台的 ARM 架构虚拟机
莫理莉+AI+为新型能源系统赋能-技术与建筑建筑供配电论坛琶洲.pptx
学生毕业离校系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 本系统分为学生、教师、管理员3个角色 (1)学生功能需求 学生进入系统可以查看首页、个人中心、离校流程、网站公告、费用结算管理、论文审核管理、我的收藏管理等操作。 (2)教师功能需求 教师进入系统可以查看首页、学生管理、离校流程管理、费用结算管理、论文审核管理等操作。 (2)管理员功能需求 管理员登陆后,主要功能模块包括首页、个人中心、学生管理、教师管理、离校信息管理、费用结算管理、论文审核管理、管理员管理、留言板管理、系统管理等功能。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。
揭秘 OpenAI 在 2027 年前创建 AGI 的计划.pptx
单极双极调制下,线路阻抗不匹配时两台单相逆变器并联的离散仿真模型研究,单极双极调制下,线路阻抗不匹配时单相逆变器Simulink并联仿真模型研究,单相逆变器Simulink并联离散仿真模型,输入电压400V,单台逆变器功率为2000W,使用下垂控制方案,在线路阻抗不匹配的情况下,实现两台逆变器并联。 可以选调制方案为单极性调制或者双极性调制。 离散模型,功率均分效果,两台逆变器输出电压和电流波形如下图。 ,核心关键词:单相逆变器; Simulink; 并联离散仿真模型; 输入电压400V; 单台功率2000W; 下垂控制方案; 线路阻抗不匹配; 调制方案; 单极性调制; 双极性调制; 功率均分效果。,离散仿真模型下,单相逆变器并联研究——400V输入、2000W功率均分实现
基于PLC的双层自动门控制:光电传感触发,有序开关与延时功能实现,附程序、画面及参考文档。,基于PLC的双层自动门控制系统:精准控制,保障无尘环境;门间联动,智能安防新体验。,基于plc的双层自动门控制系统,全部采用博途仿真完成,提供程序,画面,参考文档,详情见图。 实现功能(详见上方演示视频): ① 某房间要求尽可能地保持无尘,在通道上设置了两道电动门,门1和门2,可通过光电传感器自动完成门的打开和关闭。 门1和门2 不能同时打开。 ② 第 1 道门(根据出入方向不同,可能是门 1 或门 2),是由在通道外的开门者通过按开门按钮打开的,而第 2 道门(根据出入方向不同,可能是门 1 或门 2 )则是在打开的第 1 道门关闭后自动地打开的(也可以由通道内的人按开门按钮来打开第2 道门)。 这两道门都是在门开后,经过 3s 的延时而自动关闭的。 ③ 在门关闭期间,如果对应的光电传感器的信号被遮断,则门立即自动打开。 如果在门外或者在门内的开门者按对应的开门按钮时,立即打开。 ④ 出于安全方面的考虑,如果在通道内的某个人经过光电传感器时,对应的门已经打开,则通道外的开门者可以不按开门按钮。