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

 更新时间:2017年03月04日 10:44:15   作者:鬼芯567  
这篇文章主要介绍了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 ViewPager + Fragment实现滑动页面效果

    Android ViewPager + Fragment实现滑动页面效果

    本文通过实例代码较详细的给大家介绍了Android ViewPager + Fragment实现滑动页面效果,需要的朋友可以参考下
    2018-06-06
  • Android实现检测手机多点触摸点数

    Android实现检测手机多点触摸点数

    这篇文章主要为大家详细介绍了Android实现检测手机多点触摸点数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 获取Android界面性能数据的快捷方法

    获取Android界面性能数据的快捷方法

    这篇文章主要介绍了获取Android界面性能数据的快捷方法,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下
    2021-04-04
  • android 9.0 launcher3 去掉抽屉式显示所有 app(代码详解)

    android 9.0 launcher3 去掉抽屉式显示所有 app(代码详解)

    本文通过实例代码给大家介绍了android 9.0 Launcher3 去掉抽屉式,显示所有 app,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Android onCreate( )方法详细介绍

    Android onCreate( )方法详细介绍

    本文主要介绍Android onCreate( )方法,做Android应用的朋友对onCreate()的方法并不陌生,在开发应用的时候大家应该注意什么呢,这里给大家详细说明
    2016-09-09
  • Android实现双击TitleBar回顶部的功能示例代码

    Android实现双击TitleBar回顶部的功能示例代码

    一个简单易用的导航栏TitleBar,可以轻松实现IOS导航栏的各种效果,下面这篇文章主要给大家介绍了关于Android如何实现双击TitleBar回顶部功能的相关资料,文中给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • 详解Android的Handler机制原理

    详解Android的Handler机制原理

    Android的Handler机制是一种用于处理和调度线程之间消息传递的机制,通常用于在后台线程中执行任务,并将结果返回到主线程中更新UI,Handler机制的核心是Message和MessageQueue,以及Looper,本文给大家详细讲解了Android的Handler机制原理,需要的朋友可以参考下
    2023-10-10
  • Android自定义弹窗提醒控件使用详解

    Android自定义弹窗提醒控件使用详解

    这篇文章主要为大家详细介绍了Android自定义弹窗提醒控件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Android如何禁止向EditText控件中输入内容详解

    Android如何禁止向EditText控件中输入内容详解

    EditText是接受用户输入信息的最重要控件。下面这篇文章主要给大家介绍了关于Android如何禁止向EditText控件中输入内容的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • Android实现分享功能

    Android实现分享功能

    如何在Android中实现分享功能?这篇文章主要为大家详细介绍了Android实现分享功能的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11

最新评论