基于okHttpUtils网络请求的基类抽取
来源:互联网 发布:js判断字符串不等于 编辑:程序博客网 时间:2024/04/28 03:50
二次封装的功能
1,网络的get请求2,Xml数据解析
封装后,子类只需要实现的步骤
1,实现getUrl方法,提供一个请求的url地址2,选择性实现getParamsMap方法,提供一个请求参数的map集合,因为部分可能不需要参数3,子类继承基类的时候,基类要声明泛型的具体类型
为什么要进行基类的抽取
1,因为后期网络请求的地方比较多2,减少代码量3,结构更加清晰
抽取需要修改的地方处理
1,每个网络请求的URL地址不一样,抽取一个抽象方法,子类必须实现2,每个网络请求的参数不一样,抽取一个方法,子类选择性实现,因为有的请求可能没有参数3,接口中,参数的类型不一样,使用泛型RESTYPE,使用泛型
注意事项
1,不知道怎么抽取的就先不用管,使其可以继承2,在基类中不可以具体实现的,抽取一个方法交给子类实现3,不确定的类型,使用泛型,泛型使用必须在该类或者接口中声明,如果其他地方调用该类或者接口,也必须使用泛型 注意,在子类中,如果用到该类或者接口要进行泛型的声明
代码
/** * Author: 归零 * Date: 2017/3/4 9:31 * Email: 4994766@qq.com * Description:网络请求和数据的转换的基类 * 需要改变的地方 * 1,NewsPagerProtocol.Callback 改为 BaseProtocol * 2,参数不确定,提供一个方法 子类必须实现 * 3,Url不确定,提供一个方法,子类必须实现 * 4,泛型的改变 * 1,将要改变的类型,变为泛型 * 1,使用泛型后要在类或者接口中声明泛型 * 2,在类或者接口使用的地址,添加泛型 * 3,在使用的类或者接口声明泛型 * 2, */public abstract class BaseProtocol<RESTYPE> { protected int mCurrentPageIndex; public void setCurrentPageIndex(int currentPageIndex) { mCurrentPageIndex = currentPageIndex; } public void loadData(final BaseProtocol.Callback<RESTYPE> callback) { //决定请求的网络地址 String newsUrl = getUrl(); //http://www.oschina.net/action/api/news_list?pageIndex=0&catalog=1&pageSize=20 //网络请求 OkHttpUtils .get() .url(newsUrl) .params(getParamsMap()) .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的集合 Type type = BaseProtocol.this.getClass().getGenericSuperclass(); ParameterizedType parameterizedType = (ParameterizedType) type; Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); Type typeArgument = actualTypeArguments[0]; RESTYPE restype = (RESTYPE) XmlUtils.toBean((Class)typeArgument, response.getBytes()); //将转换后的数据通过接口回调,返回给调用方法的 callback.onResponse(restype, id); } }); } /** * 决定请求的url * 在BaseProtocol中不知道具体的实现 交给子类 * 子类必须实现,定义成为抽象方法 * @return */ protected abstract String getUrl() ; /** * 决定请求的参数 * 在BaseProtocol中不知道具体的实现 交给子类实现 * 子类必须实现 定义成抽象方法 * @return */ public HashMap<String,String> getParamsMap(){ return null; }; public interface Callback<RESTYPE> { void onError(Call call, Exception e, int id); void onResponse(RESTYPE restype, int id); }}
0 0
- 基于okHttpUtils网络请求的基类抽取
- 基于okHttpUtils网络请求的基类抽取升级版
- 基于OkHttpUtils网络请求的二次封装(简单版)
- OkHttpUtils让网络请求简单的框架
- OkHttpUtils请求网络查询手机号码归属地
- 网络请求框架(二)----改善的okHttp封装库okhttputils的使用
- OkHttpUtils一个专注于让网络请求更简单的框架
- OkHttpUtils一个专注于让网络请求更简单的框架
- OkHttpUtils一个专注于让网络请求更简单的框架
- OkHttpUtils一个专注于让网络请求更简单的框架
- OkHttpUtils一个专注于让网络请求更简单的框架
- OkHttpUtils一个专注于让网络请求更简单的框架
- OkhttpUtils一个专注于让网络请求更简单的框架
- 基于AFNetWoring 封装的网络请求类
- Android——网络框架篇:OkHttpUtils一个专注于让网络请求更简单的框架
- OkHttpUtils - 封装了okhttp的网络框架
- OkHttpUtils - 封装了okhttp的网络框架
- OkHttpUtils - 封装了okhttp的网络框架
- luoguP2439教室利用(贪心,排序,dp)
- 第七届蓝桥杯有奖猜谜
- 关系型数据库工作原理-数据库整体框架(翻译自Coding-Geek文章)
- 使用mybatis执行oracle存储过程
- QLPreviewController 预览文件
- 基于okHttpUtils网络请求的基类抽取
- 值栈详解(ValueStack)
- ettercap,shank和bettercap利用BeEF进行中间人攻击(1)
- 215. Kth Largest Element in an Array
- TCP和UDP的区别
- 小白的windows cpu 下caffe学习笔记(1)mnist测试
- java this的关键字
- 玲珑OJ 1097
- 例子讲解Vue.js的slot分发