爲什麼進行二次封裝
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;
mSpringView.onFinishFreshAndLoad();
OkHttpUtils
.get()
.url(newsUrl)
.addParams("pageIndex", mCurrentPageIndex + "")
.addParams("catalog", "1")
.addParams("pageSize", "20")
.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
Toast.makeText(mContext, "上拉加載失敗", Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(String response, int id) {
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();
++mCurrentPageIndex;
}
}
}
});
}
封裝後的代碼
/**
* 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: [email protected]
* 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;
OkHttpUtils
.get()
.url(newsUrl)
.addParams("pageIndex", mCurrentPageIndex + "")
.addParams("catalog", "1")
.addParams("pageSize", "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) {
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);
}
}