首页 > 系统 > Android > 正文

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

2019-12-12 03:30:10
字体:
来源:转载
供稿:网友

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表