前面的2篇文章对现有工作项目进行了一个简要的介绍,从这篇文章开始,将会对现在项目中用到的开发模式进行详细的总结和概括。
如题,本篇文章将总结项目中http请求的封装。
由于公司的api接口的特殊设计的缘故,为了使得在开发的工程中不至于浪费太多的时间在http请求编写上,所以我对http请求进行了封装。
1、接口的调用方式
curl http://192.168.1.23:9000/dataSearch -H "Content-Type:application/json;charset:utf-8" -d '{"ReqHeader":{"appId" : "257741","appVersion" : "0.1","deployId" : "257741","sessionId" : "1234567890","appKey" : "1cc201ee-a182-9d1b-8d94-ce1f3dec0661","uHelpVer" : "1.2","reqTime" : "2013-08-21 09:00:00"},"action":"littleGameImeiLogin","params":{"imei":"121231.com","lat":31.24312312,"lon":121.50912342}}'
所有的api接口都有一个公共的入口 http://192.168.1.23:9000/dataSearch , ReqHeader部分是特殊的格式,基本上是固定的,而各个接口之间是通过其中的 action参数来进
行划分的,而params则表示客户端部分需要向服务端传递的参数,可以理解为get请求中?后面的参数集合。而返回的格式如下
{
<span style="white-space:pre"> </span>"RespHeader": {
<span style="white-space:pre"> </span> "hostId": null,
<span style="white-space:pre"> </span> "result": "success",
<span style="white-space:pre"> </span> "errorCode": "0",
<span style="white-space:pre"> </span> "errorNote": "成功",
<span style="white-space:pre"> </span> "respTime": "2014-06-30 10:43:03"
<span style="white-space:pre"> </span>},
"RespBody": {
<span style="white-space:pre"> </span> "rtnCode": 0
<span style="white-space:pre"> </span>}
}
其中 RespHeader是头部信息,客户端调用成功与否是通过 RespBody中的rtnCode字段来进行判断的,0表示成功,其余的都表示失败。
2、http请求的封装底层基类
客户端的http请求是采用AsynTask来调用的,所有的http请求都有一个公共的基类DataSearchApiCallAsynTask,代码如下
package com.uwen.melo.themonkey.http;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.util.Log;
import com.uwen.melo.themonkey.common.ActionConstant;
import com.uwen.melo.themonkey.model.common.BasicJsonVo;
import com.uwen.melo.themonkey.util.CommonUtil;
public class DataSearchApiCallAsynTask extends
AsyncTask<String, Integer, String> {
private OnDataSearchApiCompleted listener;
private String action;
private Map<String, Object> params;
// private String result;
HttpClient httpclient;
public DataSearchApiCallAsynTask(OnDataSearchApiCompleted listener,
String action, Map<String, Object> params) {
this.listener = listener;
this.action = action;
this.params = params;
}
protected void onProgressUpdate(Integer... progress) {
// update progress here
}
@Override
protected String