欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android基于OkHttpUtils網(wǎng)絡(luò)請(qǐng)求的二次封裝

 更新時(shí)間:2017年03月04日 10:44:15   作者:鬼芯567  
這篇文章主要介紹了Android基于OkHttpUtils網(wǎng)絡(luò)請(qǐng)求的二次封裝,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

OkHttpUtils網(wǎng)絡(luò)請(qǐng)求為什么進(jìn)行二次封裝?

1、減少代碼量
2、后期換網(wǎng)絡(luò)處理框架方便

二次封裝的實(shí)現(xiàn)原理

1、將網(wǎng)絡(luò)請(qǐng)求提取在一個(gè)方法中
2、對(duì)里面的可變參數(shù),可以通過(guò)參數(shù)傳遞過(guò)去,也可以提供一個(gè)set方法傳遞過(guò)去
3、對(duì)于請(qǐng)求失敗和成功,我們可以使用接口回調(diào),讓調(diào)用該方法的對(duì)象處理

封裝后的網(wǎng)絡(luò)處理類的功能

1、網(wǎng)絡(luò)請(qǐng)求
2、xml數(shù)據(jù)轉(zhuǎn)換成javaBean

每一個(gè)處理網(wǎng)絡(luò)請(qǐng)求的ListView都要處理的3數(shù)據(jù)方法

1、初始化數(shù)據(jù)
2、下拉刷新數(shù)據(jù)
3、上拉加載數(shù)據(jù)

封裝前的代碼

 /**
  * 3,加載更多
  * 注意事項(xiàng):
  * 請(qǐng)求成功數(shù)據(jù)更新之后,要關(guān)閉SpringView
  */
 private void onDealLoadmore() {
  //資訊的網(wǎng)絡(luò)請(qǐng)求地址
  String newsUrl = Constant.NEWS_URL;
  //http://www.oschina.net/action/api/news_list?pageIndex=0&catalog=1&pageSize=20
  //關(guān)閉SpringView
  mSpringView.onFinishFreshAndLoad();
  //網(wǎng)絡(luò)請(qǐng)求
  OkHttpUtils
    .get()
    .url(newsUrl)
    .addParams("pageIndex", mCurrentPageIndex + "")//固定
    .addParams("catalog", "1")//固定,1代表資訊
    .addParams("pageSize", "20")//因?yàn)?一頁(yè)加載20條數(shù)據(jù)
    .build()
    .execute(new StringCallback() {
     @Override
     public void onError(Call call, Exception e, int id) {
      Toast.makeText(mContext, "上拉加載失敗", Toast.LENGTH_SHORT).show();
      /* //關(guān)閉SpringView
      mSpringView.onFinishFreshAndLoad();*/
     }

     @Override
     public void onResponse(String response, int id) {
      //請(qǐng)求成功,將字符串轉(zhuǎn)為javaBean,并獲取里面的泛型為News的集合
      NewsList newsList = XmlUtils.toBean(NewsList.class, response.getBytes());
      //對(duì)請(qǐng)求的數(shù)據(jù)進(jìn)行非空判斷
      if (newsList != null) {
       List<News> list = newsList.getList();
       if (list != null && list.size() > 0) {
        //數(shù)據(jù)的更新
        mData.addAll(newsList.getList());
        //適配器的更新
        mMyNewsPagerAdapter.notifyDataSetChanged();
        //請(qǐng)求頁(yè)的索引要加1
        ++mCurrentPageIndex;
        /* //關(guān)閉SpringView
        mSpringView.onFinishFreshAndLoad();*/

       }
      }
     }
    });

 }

封裝后的代碼

/**
  * 3,加載更多
  * 注意事項(xiàng):
  * 請(qǐng)求成功數(shù)據(jù)更新之后,要關(guān)閉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) {


     //獲取刷新的數(shù)據(jù)集合
     List<News> list = newsList.getList();
     //健壯性判斷
     if (list != null && list.size() > 0) {
      //更新數(shù)據(jù)集合
      mData.addAll(list);
      //更新適配器
      mMyNewsPagerAdapter.notifyDataSetChanged();
      //更新頁(yè)數(shù)的索引值
      mCurrentPageIndex ++ ;
     }
    }

   }
  });

 }

網(wǎng)絡(luò)封裝的代碼

/**
 * Author:  歸零
 * Date:  2017/3/4 1:08
 * Email:  4994766@qq.com
 * Description:網(wǎng)絡(luò)請(qǐng)求和數(shù)據(jù)解析
 */
public class NewsPagerProtocol {


 private int mCurrentPageIndex;

 public void setCurrentPageIndex(int currentPageIndex) {

  mCurrentPageIndex = currentPageIndex;
 }


 public void loadData(final Callback callback) {
  //資訊的網(wǎng)絡(luò)請(qǐng)求地址
  String newsUrl = Constant.NEWS_URL;
  //http://www.oschina.net/action/api/news_list?pageIndex=0&catalog=1&pageSize=20
  //網(wǎng)絡(luò)請(qǐng)求
  OkHttpUtils
    .get()
    .url(newsUrl)
    .addParams("pageIndex", mCurrentPageIndex + "")//固定
    .addParams("catalog", "1")//固定,1代表資訊
    .addParams("pageSize", "20")//因?yàn)?一頁(yè)加載20條數(shù)據(jù)
    .build()
    .execute(new StringCallback() {
     @Override
     public void onError(Call call, Exception e, int id) {
      //因?yàn)榉祷厥√幚淼恼?qǐng)求不一樣,所以不處理,交給調(diào)用的方法處理
      callback.onError(call, e, id);
     }

     @Override
     public void onResponse(String response, int id) {
      //請(qǐng)求成功,將字符串轉(zhuǎn)為javaBean,并獲取里面的泛型為News的集合
      NewsList newsList = XmlUtils.toBean(NewsList.class, response.getBytes());
      //將轉(zhuǎn)換后的數(shù)據(jù)通過(guò)接口回調(diào),返回給調(diào)用方法的
      callback.onResponse(newsList, id);
     }
    });
 }


 public interface Callback {

  public void onError(Call call, Exception e, int id);

  public void onResponse(NewsList newsList, int id);
 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論