java代码请求2次_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 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 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);
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
總結
以上是生活随笔為你收集整理的java代码请求2次_Android基于OkHttpUtils网络请求的二次封装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骑外卖餐车高考的男生找到了:边跑单边备考
- 下一篇: android sina oauth2.