为什么进行二次封装
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);
}
}