转载自Keegan小钢
接口层
PostEngine,请求引擎类,对请求的发送和响应结果进行处理;
Response,响应类,封装了Http请求返回的数据结构;
Api,接口类,定义了所有接口方法;
ApiImpl,接口实现类,实现所有接口方法。
{"event": "0", "msg": "success"}{"event": "0", "msg": "success", "obj":{...}}{"event": "0", "msg": "success", "objList":[{...}, {...}], "currentPage": 1, "pageSize": 20, "maxCount": 2, "maxPage": 1}event为返回码,0表示成功,msg则是返回的信息,obj是返回的单个数据对象,objList是返回的数据对象数组,currentPage表示当前页,pageSize则表示当前页最多对象数量,maxCount表示对象数据总量,maxPage表示总共有多少页。根据此结构,Response基本的定义如下:
public class Response<T> {
private String event;
private String msg;
private T obj;
private T objList;
private int currentPage;
private int pageSize;
private int maxCount;
private int maxPage;
//getter和setter方法
... }public Response<Void> login(String loginName, String password); public Response<VersionInfo> getLastVersion(); public Response<List<Coupon>> listNewCoupon(int currentPage, int pageSize);
ApiImpl则实现所有Api接口了,实现代码类似如下:
@Override
public Response<Void> login(String loginName, String password) {
try {
String method = Api.LOGIN;
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("loginName", loginName));
params.add(new BasicNameValuePair("password", EncryptUtil.makeMD5(password)));
TypeToken<Response<Void>> typeToken = new TypeToken<Response<Void>>(){};
return postEngine.specialHandle(method, params, typeToken);
} catch (Exception e) {
//异常处理
}
}核心层
public void getCustomer(String loginName, CallbackListener<Customer> callbackListener);
这是一个获取用户信息的方法,因为需要向接口层请求服务器Api数据,所以添加了callback监听器,在callback里对返回的数据结果进行操作。CallbackListener就定义了一个成功和一个失败的方法,代码如下:
public interface CallbackListener<T> {
/**
* 请求的响应结果为成功时调用
* @param data 返回的数据
*/
public void onSuccess(T data);
/**
* 请求的响应结果为失败时调用
* @param errorEvent 错误码
* @param message 错误信息
*/
public void onFailure(String errorEvent, String message);
}参数检查,检查参数的合法性,包括非空检查、边界检查、有效性检查等;
使用异步任务调用接口层的Api,返回响应结果。
界面层
模型层
使用gson的@SerializedName标签,比如0为FALSE,1为TRUE,则可以如下定义:
public enum BooleanType {
@SerializedName("0")
FALSE,
@SerializedName("1")
TRUE
}通过定义一个value,如下:
public enum BooleanType {
FALSE("0"),
TRUE("1");
private String value;
BooleanType(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}

