全网整合营销服务商

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

免费咨询热线: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 


相关文章: 网站app免费制作软件,能免费看各大网站视频的手机app?  黑客如何利用漏洞与弱口令入侵网站服务器?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  如何用AWS免费套餐快速搭建高效网站?  广州营销型建站服务商推荐:技术优势与SEO优化解析  如何在IIS中新建站点并解决端口绑定冲突?  开封网站制作公司,网络用语开封是什么意思?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何选择适配移动端的WAP自助建站平台?  如何配置支付宝与微信支付功能?  建站之星收费标准详解:套餐费用及年费价格表一览  h5网站制作工具有哪些,h5页面制作工具有哪些?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何在云服务器上快速搭建个人网站?  ,柠檬视频怎样兑换vip?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  小型网站制作HTML,*游戏网站怎么搭建?  建站主机功能解析:服务器选择与快速搭建指南  深圳网站制作案例,网页的相关名词有哪些?  如何安全更换建站之星模板并保留数据?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  北京网站制作的公司有哪些,北京白云观官方网站?  如何通过VPS建站实现广告与增值服务盈利?  c# 在ASP.NET Core中管理和取消后台任务  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  制作电商网页,电商供应链怎么做?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  太原网站制作公司有哪些,网约车营运证查询官网?  定制建站策划方案_专业建站与网站建设方案一站式指南  打鱼网站制作软件,波克捕鱼官方号怎么注册?  如何在景安云服务器上绑定域名并配置虚拟主机?  如何配置IIS站点权限与局域网访问?  建站之星2.7模板快速切换与批量管理功能操作指南  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  网站制作价目表怎么做,珍爱网婚介费用多少?  宝塔建站助手安装配置与建站模板使用全流程解析  威客平台建站流程解析:高效搭建教程与设计优化方案  如何快速搭建高效WAP手机网站?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  网站微信制作软件,如何制作微信链接?  浅析上传头像示例及其注意事项  如何通过网站建站时间优化SEO与用户体验?  如何在Golang中使用replace替换模块_指定本地或远程路径  如何解决VPS建站LNMP环境配置常见问题?  官网网站制作腾讯审核要多久,联想路由器newifi官网  建站之星伪静态规则如何设置?  装修招标网站设计制作流程,装修招标流程? 

您的项目需求

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