前言
Android数据层基本都跟业务挂钩,如果不把数据层提出来,哪架构无法做到完全独立,数据层的解耦是非常重要,所以就要做到模块完全独立,可扩展。
先看看JsonPaserFactory的实现,前面有讲过,不做详细说明:
BaseEntity entity = (BaseEntity) BaseApplication.httpRes.getPaser(type);
里面调用到application中的全局解析配置类BaseHttpRes类,此类是一个抽象类,具体代码如下:
public abstract class BaseHttpRes { /** * 根据reqType获取URL * @param reqType * @return */ public abstract String getUrl(int reqType); /** * 请求地址需要格式化的 * */ public String getUrl(int mId, String format) { switch (mId) { // case REQ_METHOD_GET_MORE_REPLY: // return String.format(REQ_URL_GET_REPLY, format); default: return format + getUrl(mId); } } /** * 根据reqType获取返回解析对象 * @param type * @return */ public abstract Object getPaser(int type); }BaseApplication实现如下:
public abstract class BaseApplication extends Application implements UncaughtExceptionHandler { public BaseHttpRes httpRes; /** * 初始化请求常量 * * @return */ protected abstract BaseHttpRes initBaseHttpRes(); public BaseApplication() { httpRes = initBaseHttpRes(); } }上面 看到了基类编写了一个抽象方法,当子类继承时就的重写这个类,这样每个子项目就可以自由扩展实现,具体配置类就不用直接跟架构关联。
public class YingJiaApp extends BaseApplication { public AsyncHttpClientImpl asyncImpl; private final static int CWJ_HEAP_SIZE = 8* 1024* 1024 ; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); asyncImpl = AsyncHttpClientImpl.getHupuHttpClient(); MySharedPreferencesMgr.init(this, "yingjia"); } @Override protected BaseHttpRes initBaseHttpRes() { // TODO Auto-generated method stub return YingJiaRes.getInstance(); } }
public class YingJiaRes extends BaseHttpRes { private static YingJiaRes instance; // public static String BASE_URL = "http://newapp.mobile.com/"; public static String BASE_URL = "http://api.app.com/v1/ios/"; public static String BASE1_URL = "http://api.app.com/v1/"; public static int REQ_METHOD_POST = 10000; }