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<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); } }

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

时间: 2024-11-10 09:42:43

Android基于OkHttpUtils网络请求的二次封装的相关文章

毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选

毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.io/picasso/ 我们在上篇OkHttp的时候说过这个Picasso,学名毕加索,是Square公司开源的一个Android图形缓存库,而且使用起来也是非常的简单,只要一行代码就轻松搞定了,你会问,为什么不介绍一下Glide?其实Glide我有时间也是会介绍的,刚好上篇我们用到了Picasso,

GSF基于PHP Swoole Framework进行二次封装

基于Swoole框架的封装扩展和完善,Swoole由于其文档太少,难度对于PHP程序员来说过于大,很多php程序员敬而远之. 工作之余基于Swoole frame 进行了二次封装,不断完善中 暂时定名为 GSF....... 不断完善学习中..........     项目地址  github   

Android 几种网络请求的区别与联系

HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android 2.3以后使用HttpUrlConnection,之前使用HttpClient. 在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择.而在Android 2.3版本及以后,HttpURLConnecti

nginx android app 慢网络请求超时

最近遇到了android 在慢网络下面请求服务器报 java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer) java.net.SocketTimeoutException: failed to connect to mobile2.itanzi.com/120.27.142.146 (port 80) after 15000ms java.net.SocketTimeoutException

Android基于google Zxing实现各类二维码扫描效果_Android

随着微信的到来,二维码越来越火爆,随处能看到二维码,比如商城里面,肯德基,餐厅等等,对于二维码扫描我们使用的是google的开源框架Zxing,我们可以去http://code.google.com/p/zxing/下载源码和Jar包,之前我项目中的二维码扫描功能只实现了扫描功能,其UI真的是其丑无比,一个好的应用软件,其UI界面也要被大众所接纳,不然人家就不会用你的软件啦,所以说应用软件功能和界面一样都很重要,例如微信,相信微信UI被很多应用软件所模仿,我也仿照微信扫描二维码效果进行模仿,虽然

Android基于google Zxing实现各类二维码扫描效果

随着微信的到来,二维码越来越火爆,随处能看到二维码,比如商城里面,肯德基,餐厅等等,对于二维码扫描我们使用的是google的开源框架Zxing,我们可以去http://code.google.com/p/zxing/下载源码和Jar包,之前我项目中的二维码扫描功能只实现了扫描功能,其UI真的是其丑无比,一个好的应用软件,其UI界面也要被大众所接纳,不然人家就不会用你的软件啦,所以说应用软件功能和界面一样都很重要,例如微信,相信微信UI被很多应用软件所模仿,我也仿照微信扫描二维码效果进行模仿,虽然

Volley,小并发网络请求的好帮手

不得不说,当不了解一件事情的时候,就会像当然的认为,其很神秘.但是当真正的接触到了这些神秘的item,就不会有这种感觉了.作为一个android开发新手的我,刚接触到了Volley这个开源的网络请求框架,就瞬间被她打动了.下面我就谈一谈我对Volley的一些理解. Volley是什么? Volley是谷歌在2013年的I/O大会上发布的一个网络请求的框架,Volley在性能方面进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载

Android网络请求库android-async-http介绍_Android

Android网络请求库:android-async-http开源框架 之前有一篇描述了客户端请求服务器端的方式-Post的请求方式.今天介绍一个请求服务器的一个开源库-android-async-http库. 1. 概念: 这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法(匿名内部类)处理请求结果. 2. 特征: (1).处理异步Http请求,并通过匿名内部类处理回调结果 **(2).**Http异步请

Android 网络请求框架Volley实例详解

Android 网络请求框架Volley实例详解 首先上效果图 Logcat日志信息on Reponse Volley特别适合数据量不大但是通信频繁的场景,像文件上传下载不适合! 首先第一步 用到的RequetQueue RequestQueue.Java RequestQueue请求队列首先得先说一下,ReuqestQueue是如何对请求进行管理的...RequestQueue是对所有的请求进行保存...然后通过自身的start()方法开启一个CacheDispatcher线程用于缓存调度,开