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

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

(0)

相关推荐

  • Android okhttputils现在进度显示实例代码

    OkHttpUtils是一款封装了okhttp的网络框架,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,整合Gson,自动解析返回对象,支持Https和自签名证书,支持cookie自动管理,扩展了统一的上传管理和下载管理功能. //download the new app private void downLoadNewApp(NewVersion.XianzaishiRfBean version) { if (StringUtils.isEmpt

  • Android开发之OkHttpUtils的具体使用方法

    一.概述 之前写了篇Android OkHttp完全解析 是时候来了解OkHttp了,其实主要是作为okhttp的普及文章,当然里面也简单封装了工具类,没想到关注和使用的人还挺多的,由于这股热情,该工具类中的方法也是剧增,各种重载方法,以致于使用起来极不方便,实在惭愧. 于是,在这个周末,抽点时间对该工具类,进行了重新的拆解与编写,顺便完善下功能,尽可能的提升其使用起来的方便性和易扩展性. ok,那么目前,该封装库志支持: 一般的get请求 一般的post请求 基于Http的文件上传 文件下载

  • android通过okhttpClient下载网页内容的实例代码

    有时候我们需要通过自己的缓存机制来缓存网页内容,当没有网的时候显示本地的缓存,当有网的时候取最新的继续缓存到本地. 主要机制: 通过AsyncTask异步AsyncTask请求,将得到的response.body()缓存起来. 主要代码如下: //通过OkHttpClient加载html的方式先判断网页是否能走通 class WebViewStatusRequester extends AsyncTask<String, String, Integer> { String url; @Over

  • Android基于OkHttpUtils网络请求的二次封装

    OkHttpUtils网络请求为什么进行二次封装? 1.减少代码量 2.后期换网络处理框架方便 二次封装的实现原理 1.将网络请求提取在一个方法中 2.对里面的可变参数,可以通过参数传递过去,也可以提供一个set方法传递过去 3.对于请求失败和成功,我们可以使用接口回调,让调用该方法的对象处理 封装后的网络处理类的功能 1.网络请求 2.xml数据转换成javaBean 每一个处理网络请求的ListView都要处理的3数据方法 1.初始化数据 2.下拉刷新数据 3.上拉加载数据 封装前的代码 /

  • 基于小程序请求接口wx.request封装的类axios请求

    Introduction wx.request 的配置.axios 的调用方式 源码戳我 feature 支持 wx.request 所有配置项 支持 axios 调用方式 支持 自定义 baseUrl 支持 自定义响应状态码对应 resolve 或 reject 状态 支持 对响应(resolve/reject)分别做统一的额外处理 支持 转换请求数据和响应数据 支持 请求缓存(内存或本地缓存),可设置缓存标记.过期时间 use app.js @onLaunch import axios fo

  • vue axios基于常见业务场景的二次封装的实现

    axios axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 在前端框架中的应用也是特别广泛,不管是vue还是react,都有很多项目用axios作为网络请求库. 我在最近的几个项目中都有使用axios,并基于axios根据常见的业务场景封装了一个通用的request服务. npm: $ npm install axios bower: $ bower install axios Using cdn: <script src="https:/

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

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

  • 基于Vue+element-ui 的Table二次封装的实现

    本人第一次写这个 写的不好还望指出来 作为一个由于公司产品的升级然促使我从一个后端人员自学变成前端的开发人员 ! 公司做的数据管理系统所以离不开表格了 然后表格样式统一啥的就想到封装一个element-ui 里面的table+Pagination了 效果图 表格组件的引入与使用 <com-table title="监测数据" v-model="tableData4" @selection-change="handleSelectionChange&q

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

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

  • 详解Flutter中网络框架dio的二次封装

    其实dio框架已经封装的很好了,但是在实战项目中,为了项目可以统一管理,还是需要对dio框架进行二次封装. 整体思路:一般情况下,后台返回的数据我们可以分为两部分 1.状态数据 2.渲染数据 状态数据就是接口有没有正常返回数据相关的数据,这部分数据跟业务无关,我们可以封装起来统一管理,渲染数据就是我们渲染页面所需要的数据,这块的数据需要我们自己处理. 接下来我们就主要处理渲染数据这块的内容,我定义了两个函数,渲染数据可能为一个对象或者一个数组,我做了分别处理,定义两个函数来接受渲染数据. //

  • Android调用OpenCV2.4.10实现二维码区域定位

    Android上使调用OpenCV 2.4.10 实现二维码区域定位(Z-xing 码),该文章主要用于笔者自己学习中的总结,暂贴出代码部分,待以后有时间再补充算法的详细细节. Activity class Java 文件 package cn.hjq.android_capture; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOExce

  • Flutter 网络请求框架封装详解

     Flutter 请求网络的三种方式 flutter 请求网络的方式有三种,分别是 Dart 原生的网络请求 HttpClient.第三方网络请求 http以及 Flutter 中的 Dio.我们可以比较一下这三种网络请求方式,然后封装为我们方便请求网络的工具类. Dart 原生的网络请求 HttpClient 实现 Dart 获取网络数据的请求,一般我们需要以下几个步骤: step 1: 原生的网络请求时不需要修改 pubspec.yaml 文件的,我们只需要在使用的地方引入所需包就可以了 i

  • Vue3如何使用axios发起网络请求

    目录 Vue3使用axios发起网络请求 1.何为Axios? 2.如何安装Axios 3.如何封装网络请求和全局实例化axios 4. api.js是什么? 5.http.js是什么? 6.request.js是什么? 7.如何在Vue文件中请求封装好的API呢? Vue3.0请求接口的例子 Vue3使用axios发起网络请求 即使是小型项目也会涉及到请求后端API,除非你的网站展示的是一些不需要维护的静态数据,第三篇文章我们来给Vue项目搞上axios. 1.何为Axios? 请看官方对Ax

随机推荐