java代码请求2次_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);

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集群服务负载均衡------LVS

个人的理解,以一种通俗易懂的方式讲述出来,如果有哪些地方说的不正确的话,希望大家留言指出来。笔者会非是常的感谢! Cluster服务器集群,直接理解为一些单一的服务器的集合通过某种方式组合起来,为客户端提…

Cubieboard2 debian

环境准备 本文所使用的主机环境为kubuntu 12.10,然而一般情况下,下面涉及到的命令对基于Debian的(X)ubuntu系列都应该适用。 为不引起混淆,我们作如下约定: 工作目录为 $WORK_DIR,目标系统 rootfs 目录为 $WORK_DIR/$ROOTFS_DIR命…

linux和python的关系_Python、Linux与我的缘分

是在大二时期,那时候不懂什么技术,所以就选择了 Ubuntu 来学习、 使用, 它好操作、 界面绚丽、 简单易用, 对于我这种 Linux 新手来说知足了。 毕竟没玩过 Linux ,知识有限, 玩不转 Linux 的种种配置&#…

linux 磁盘uuid获取

ls -l /dev/disk/by-uuid/总用量 0lrwxrwxrwx 1 root root 10 2012-08-15 09:28 0af9bc87-c3c9-49eb-829e-caf572298cc7 -> http://www.cnblogs.com/sdb1lrwxrwxrwx 1 root root 10 2012-08-15 09:27 3e8b5c85-3f5b-4864-b45e-03ff0073eb5f -> http://www.cnblogs.com/sd…

tomcat jsp导入java_[导入]Tomcat JSP Web 开发中的乱码问题小姐

1. 静态页面的乱码问题文件的编码和浏览器要显示的编码不一致。1) 检查文件原始的编码, 可以用记事本打开, 然后选择另存为来看;2) 给当前页面加入一个指令来建议浏览器用指定的编码来显示文件字符内容.3) 如果系统是英文XP,没装东亚字符集支持, 也会显示乱码.2. JSP 页面的乱码…

编译Mysql 5.5时报do_abi_check错误

下载mysql-5.5.3-m3源码后&#xff0c;执行configure无错误&#xff0c;在make的时候却报: make[2]: *** [do_abi_check] 错误 1<br> make[2]: Leaving directory /tmp/mysql-5.5.3-m3<br> make[1]: *** [abi_check] 错误 2<br> make[1]: Leaving directory …

四大开源分布式存储_ipfs分布式存储行业面临着四大主要风险,你知道是哪些吗?...

为了响应国家号召、推动分布式存储技术落地、防御行业风险&#xff0c;中国分布式存储产业联盟启动&#xff0c;全国从事IPFS以及分布式存储从业者对行业风险及联盟成立的必要性达成了高度共识&#xff0c;目前有36家以上的IPFS分布式存储行业企业填写了联盟申请表。几位国内知…

mathematica打包java_从Mathematica到Java的图像

我试图从Mathematica中获取一张图片.我尝试评估一些使用包中的方法生成图形的Mathematica代码.如果我将代码粘贴到Mathematica Notebook,则会正确生成图形.所以我的问题&#xff1a;如何将这些图形转换为Java ???这是我的示例代码&#xff1a;ml MathLinkFactory.createKer…

pjsua帮助手册(中文)

原文地址 : http://www.pjsip.org/pjsua.htm 介绍 PJSUA是一个开源的命令行SIP用户代理&#xff08;软电话&#xff09;&#xff0c;用PJSIP协议&#xff0c;PJNATH&#xff0c;和PJMEDIA实现。 它虽然只有很简单的命令行界面&#xff0c;但是功能齐全。 SIP功能&#xff1a; 多…

c/c++笔试面试题(4)

c/c笔试面试题&#xff08;4&#xff09; 2007-11-08 16:46 749人阅读 评论(0) 收藏 举报Sony笔试题 1&#xff0e;完成下列程序 * *.*. *..*..*.. *...*...*...*... *....*....*....*....*.... *.....*.....*.....*.....*.....*..... *......*......*......*......*......*...…

js date转成 时间字符串_秋招快要开始了,前端笔试中的坑位-JS隐式转换问题

我们在写笔试题的时候&#xff0c;经常碰到涉及隐式转换的题目&#xff0c;例如"1" 2 obj 1 [] ![] [null] false 和 叫做严格运算符&#xff0c;对象类型指向地址相同或原始类型&#xff08; 数值、字符串、布尔值&#xff09;值相同&#xff1b;叫做相等运算…

Java中快速处理集合_简洁又快速地处理集合——Java8 Stream(上)

作者&#xff1a;Howie_Y&#xff0c;系原创投稿主页&#xff1a;www.jianshu.com/u/79638e5f0743Java 8 发布至今也已经好几年过去&#xff0c;如今 Java 也已经向 11 迈去&#xff0c;但是 Java 8 作出的改变可以说是革命性的&#xff0c;影响足够深远&#xff0c;学习 Java …

FTP服务器和客户端源代码编写问题(ftp server client source)

最近关注FTP程序源代码的朋友非常多&#xff0c;这里简单说明一下。 其实FTP也就是普通的Socket程序&#xff0c;只是需要按照FTP协议(RFC959, 1635?可能我记错了)去做&#xff0c;也就是每个消息有固定的结构的&#xff0c;比如头3个字节必须是200,201,300,400之类的数字表示…

eclipse编译java项目class文件_动态编译 Java 代码以及生成 Jar 文件

导读&#xff1a; 最近在看 Flink 源码的时候发现到一段实用的代码&#xff0c;该代码实现了 java 动态编译以及生成 jar 文件。将其进行改进后可以应用到我们的平台上&#xff0c;实现在平台页面上编写 java 代码语句&#xff0c;提交后由后台进行编译和打成 Jar 包再上传到指…

Android初级开发第七讲--特效和数据传递处理

博客出自&#xff1a;http://blog.csdn.net/liuxian13183&#xff0c;转载注明出处&#xff01; All Rights Reserved ! 大家好&#xff0c;相信大家对iphone上的特效早有耳闻&#xff0c;特效不仅给人以炫丽的感觉&#xff0c;也给人以性能优越的感觉&#xff1b;但万丈高楼平…

java查看日志命令_[Java教程]【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...

[Java教程]【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo0 2017-11-14 12:00:29linux查看日志文件内容命令tail、cat、tac、head、echotail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C,---------------------------linux 如何…

pjsip简介1

如果你对SIP/VoIP技术感兴趣,哪希望你不要错过:),如果你对写出堪称优美的Code感兴趣,那么你也不可错过:)这期间我想分析一下一个实际的协议栈的设计到实现的相关技术,算是自己的一个学习经历记录.最初选择这个库做分析的原因很简单,文档齐全:),其它良好的特征则是慢慢发现的:) …

Dx11DemoBase 基类(三) 实例应用 【已实现】【附带源码】

现在我已经到哪了? 读书时&#xff0c;尤其是技术知识书籍&#xff0c; 我一般会担忧自己是否陷得太深&#xff0c; 细节关注得太多&#xff0c; 而忘了整体的过程&#xff1b; 一直以来对Direct3D 很畏惧&#xff0c; 因为太多函数和细节&#xff1b;现在我必须暂缓下&#x…

修改 decimal 默认值为0.00 sql_被经理邀请去“爬山”,只是因为我写错了一条SQL语句?...

作者&#xff1a;isysc1链接&#xff1a;https://juejin.im/post/5f06a2156fb9a07e5f5180df来源&#xff1a;掘金前戏SQL 写的妙&#xff0c;涨薪呱呱叫&#xff01;新来的实习生小杨写了一条 SQL 语句SELECT wx_id from user WHERE wx_id 2当小杨迫不及待准备下班回家的时候&…

java课工场面向对象题p题库_面向对象设计(Java)-题库课稿.doc

面向对象程序设计 java 题库抽题规范:此题库共75道题,抽8道作为期末考试题。其中,易8道,较易33道,较难18道,难16道.按题型,第一大题抽4道&#xff0c;每道10分&#xff1b;第二大题抽2道&#xff0c;每道10分&#xff1b;第三大题抽1道&#xff0c;每道20分&#xff1b;第四大题…