全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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


# Android  # OkHttpUtils  # 网络请求  # Android 网络请求框架解析之okhttp与okio  # Android OkHttp库简单使用和封装教程助你快速掌握网络请求技能  # 加载  # 回调  # 都要  # 可以通过  # 可以使用  # 提供一个  # 转换成  # 大家多多  # 后期  # 健壮性  # action  # net  # news_list  # api  # NEWS_URL  # Constant  # http  # oschina  # www  # pageIndex 


相关文章: 如何在腾讯云服务器上快速搭建个人网站?  建站主机是否等同于虚拟主机?  C#如何序列化对象为XML XmlSerializer用法  金*站制作公司有哪些,金华教育集团官网?  如何配置支付宝与微信支付功能?  如何挑选最适合建站的高性能VPS主机?  潮流网站制作头像软件下载,适合母子的网名有哪些?  相册网站制作软件,图片上的网址怎么复制?  七夕网站制作视频,七夕大促活动怎么报名?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  建站之星如何通过成品分离优化网站效率?  建站主机如何安装配置?新手必看操作指南  如何用花生壳三步快速搭建专属网站?  智能起名网站制作软件有哪些,制作logo的软件?  如何用好域名打造高点击率的自主建站?  网站制作网站,深圳做网站哪家比较好?  行程制作网站有哪些,第三方机票电子行程单怎么开?  网站制作壁纸教程视频,电脑壁纸网站?  江苏网站制作公司有哪些,江苏书法考级官方网站?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  高端网站建设与定制开发一站式解决方案 中企动力  孙琪峥织梦建站教程如何优化数据库安全?  海南网站制作公司有哪些,海口网是哪家的?  韩国服务器如何优化跨境访问实现高效连接?  如何用西部建站助手快速创建专业网站?  专业公司网站制作公司,用什么语言做企业网站比较好?  宝塔建站助手安装配置与建站模板使用全流程解析  制作网站外包平台,自动化接单网站有哪些?  制作电商网页,电商供应链怎么做?  ,购物网站怎么盈利呢?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  山东网站制作公司有哪些,山东大源集团官网?  建站上传速度慢?如何优化加速网站加载效率?  如何快速生成专业多端适配建站电话?  建站之星后台密码遗忘?如何快速找回?  如何快速查询域名建站关键信息?  高端云建站费用究竟需要多少预算?  如何在阿里云完成域名注册与建站?  如何确认建站备案号应放置的具体位置?  PHP 500报错的快速解决方法  黑客入侵网站服务器的常见手法有哪些?  建站之星免费模板:自助建站系统与智能响应式一键生成  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何快速搭建高效WAP手机网站?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何快速重置建站主机并恢复默认配置?  如何通过PHP快速构建高效问答网站功能?  如何通过宝塔面板实现本地网站访问?  如何用PHP快速搭建CMS系统? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。