Android基于OkHttpUtils网络请求的二次封装
程序员文章站
2023-12-09 18:05:03
okhttputils网络请求为什么进行二次封装?
1、减少代码量
2、后期换网络处理框架方便
二次封装的实现原理
1、将网络请求提取在一个方法中
2、对里面...
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 Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 三 文件上传(支持多文件/多图片上传)
-
Android网络请求框架(四)Retrofit和RxJava的封装
-
带你一步步剖析Retrofit 源码解析:一款基于 OkHttp 实现的网络请求框架 android源码解析网络请求OKHTTPRetrofit
-
Android网络请求框架(四)Retrofit和RxJava的封装
-
Android Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 三 文件上传(支持多文件/多图片上传)
-
Android Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 一 框架配置