Android网络层与数据层设计

本文探讨了Android应用中数据层的设计,强调了一个良好的解析器对于减少代码复杂性、提高维护性和扩展性的重要性。通过使用统一的解析器,如JsonPaserFactory,可以将网络请求返回的数据模型化并传递给业务层。数据模型类应继承自基础类,以实现解耦和模块化的代码结构。
摘要由CSDN通过智能技术生成
前言

Android数据层就是数据模型,如果只是随便解析,返回到视图层,那只会代码繁重、维护难、扩展性差,所以一个好解析器设计,会减少开发成本和维护。

前面有讲过一个网络申请回来会回传给一个AsyncHttpResponseHandler,成功和失败会有方法,代码如下:

public class BaseHttpHandler extends AsyncHttpResponseHandler {

	private HttpCallback response;
	public int messageID1;
	public int messageID2;

	public BaseHttpHandler(HttpCallback response) {
		this.response = response;
	}

	@Override
	public void onFinish() {
		super.onFinish();
	}

	@Override
	public 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 block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	@Override
	public 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 block
			e.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 block
				e.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));
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值