Android网络层与数据层设计
来源:互联网 发布:淘宝api 源码下载 编辑:程序博客网 时间:2024/05/17 22:52
前言
Android数据层就是数据模型,如果只是随便解析,返回到视图层,那只会代码繁重、维护难、扩展性差,所以一个好解析器设计,会减少开发成本和维护。
前面有讲过一个网络申请回来会回传给一个AsyncHttpResponseHandler,成功和失败会有方法,代码如下:
public class BaseHttpHandler extends AsyncHttpResponseHandler {private HttpCallback response;public int messageID1;public int messageID2;public BaseHttpHandler(HttpCallback response) {this.response = response;}@Overridepublic void onFinish() {super.onFinish();}@Overridepublic void onSuccess(HttpEntity content, int reqType) {super.onSuccess(content, reqType);if (response!= null) {try {Log.i("HU","handle==content="+content);BaseEntity entity=JsonPaserFactory.paserObj(content, reqType);response.onSuccess(EntityUtils.toString(content), entity, reqType);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}@Overridepublic void onFailure(Throwable error, String content, int reqType) {super.onFailure(error, content, reqType);if (response != null) {response.onFailure(error, content, reqType);}}}大家有注意这行代码:
BaseEntity entity=JsonPaserFactory.paserObj(content,reqType);此处就是统一解析器,把解析好的数据模型,通过下面这行代码返回业务层:
<span style="white-space:pre"></span>response.onSuccess(EntityUtils.toString(content), entity, reqType);大家看到两个类JsonPaserFactory和BaseEntity,JsonPaserFactory工厂解析类,当某一个功能完成后,回来会传给一个类型,然后JsonPaserFactory会返回好数据模型,代码如下:
public class JsonPaserFactory {public static BaseEntity paserObj(String s, int type) {if (s == null || s.trim().toString().equals(""))return null;<span style="color:#ff0000;">BaseEntity entity = (BaseEntity) BaseApplication.httpRes.getPaser(type);</span>try {<span style="color:#ff0000;">entity.paser(s);</span>} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return entity;}public static BaseEntity paserObj(HttpEntity en, int type) {BaseEntity entity = null;if (en != null) {try {entity = paserObj(EntityUtils.toString(en), type);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return entity;}}
首先解析数据类要有个基础类,所有数据类都应该继承父类,就跟设计模式里面工厂模式一样,用户不需要知道每一个具体操作,外面统一会指向每个模块。
/** * 解析实体类 基类 * @author apple_hsp * */public abstract class BaseEntity {public final static String KEY_RESULT="result";public final static String KEY_LIST="list";public final static String KEY_DATE="date";public final static String KEY_NAME="name";public final static String KEY_DESC="desc";public final static String KEY_DATA="data";public abstract void paser(String data) throws Exception ;public String err;public static void paserKeys(JSONArray arr,LinkedHashMap<String, String> map)throws Exception{JSONArray keys=arr.getJSONArray(0);JSONArray values=arr.getJSONArray(1);int size =keys.length();for(int i=0;i<size;i++){map.put(keys.getString(i), values.getString(i));}}}
0 0
- Android网络层与数据层设计
- 应用层编码与网络接口层的数据发送
- 数据层组件设计与数据传递数据层组件设计与数据传递
- 网络层数据接收
- Android展现层与业务层的数据解耦
- Android展现层与业务层的数据解耦
- 数据层设计
- SAAS 数据层设计
- 网络层与路由器
- 数据链层到网络层数据传递
- 数据路链路层、网络层、传输层
- Android网络层封装
- Android 网络层学习
- 基于Spring4+Hibernate4的通用数据访问层+业务逻辑层(Dao层+Service层)设计与实现!
- 网络层与传输层的区别
- iOS网络层设计感想
- iOS网络层设计感想
- iOS网络层设计感想
- 数据结构上机测试1:顺序表的应用
- 【拾遗】检测cin输入是否满足类型
- 李在福羽毛球教学经典视频汇总31集
- linux 硬盘使用情况查看
- 自定义打印函数/log打印工具
- Android网络层与数据层设计
- IOS-IAP 苹果支付
- jQuery页面交互
- Android Studio Gradle 导出JavaDocJar提示编码GBK的字符无法映射解决办法
- 捕获edittext 确认键
- Spring IOC三种注入方式(接口注入、setter注入、构造器注入)
- JSON toJSONString
- 云计算如何改变IT运维管理的未来
- 【Linux】使用vi编辑器创建文本文件