android http post 请求与 json字符串
一、目标
android客户端发送一个json格式的http的请求,期望得到服务端的一个json反馈。
1. 客户端发送的json格式为:
{"data" : "valueString"}
2. 服务端发送的json格式:
{
"errorCode" : "valueString",
"entries":[
{
"name":"海底捞",
"phone":"18800000110",
"url":"http://cater.haidilao.com/Cater/wap/index.action"
},
{
"name":"峨眉山",
"phone":"18800000119",
"url":"http://51youhui.baidu.com/emeishan"
},
...
{
"name":"中公教育",
"phone":"18800000666",
"url":"http://m.offcn.com"
}
]
}
3. 其中 json中映射的实体类类型定义如下:
public class Entry { // 用戶名 private String name; // 用戶号码 private String phone; // 用户主页网址 private String url; public Entry() { } public Entry(String name, String phone, String url) { super(); this.name = name; this.phone = phone; this.url = url; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public boolean isSupportZhiDaHao() { return this.url != null; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
二、引用包前提条件:
1. android客户端:
没有额外的包以来,所依赖的json包都包含在android sdk的org.json包下。
2 .服务端:
commons-beanutils-1.9.2.jar
commons-collections-3.2.1.jar
commons-lang-2.6.jar
commons-logging-1.2.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar
下载参考:http://www.mvnrepository.com/
三、客户端代码
1. android 客户端发送请求时的代码(使用httpClient):
// 测试服务器所在的项目URL final String SERVER_URL = "http://172.22.148.49:8080/TestHttp/TestHttp"; HttpPost postRequest = new HttpPost(SERVER_URL); // 构造请求的json串 JSONObject para = new JSONObject(); para.put("data", numStr); StringEntity entity = new StringEntity(para.toString(), "utf-8"); HttpClient client = new DefaultHttpClient(); postRequest.setEntity(entity); HttpResponse response = client.execute(postRequest);
2.android 客户端接受并解析服务端返回请求的json值:
List<Entry> items = new ArrayList<Entry>(); // 从response中读取所有字符格式的返回值 String entityString = EntityUtils.toString(response.getEntity()); // 将字符格式的返回值,映射成Json对象 JSONObject resJsonObj = new JSONObject(entityString); // 尝试读取返回的json值中的statusCode字段 if (resJsonObj.getString(statusCode) == null || resJsonObj.getString(STATUS_CODE).isEmpty() || !resJsonObj.getString(STATUS_CODE).equals("ok")) { return; } // 尝试解析所有以json数组形式返回的json对象 JSONArray entiesArray = resJsonObj.getJSONArray("entries"); for (int i = 0; i < entiesArray.length(); i++) { JSONObject json = entiesArray.getJSONObject(i); item = new Entry(); item.setName(json.getString("name")); item.setPhonenum(json.getString("phone")); item.setHomePageSites(json.getString("url")); items.add(item); }
四、服务端代码
1. 读取客户端的http请求,并解析出json参数(servlet 的doPost方法中):
// 答应http请求中的参数 String acceptjson = ""; BufferedReader br = new BufferedReader(new InputStreamReader( (ServletInputStream) request.getInputStream(), "utf-8")); StringBuffer sb = new StringBuffer(""); String temp; while ((temp = br.readLine()) != null) { sb.append(temp); } br.close(); acceptjson = sb.toString(); String data = ""; JSONObject jo = JSONObject.fromObject(acceptjson); data = jo.getString("data"); System.out.println("客戶端传来的参数为" + data);
2. 服务端完成针对请求参数中指定的值的处理后,决定返回上面我们约定的json格式json串:
// 创建json根对象 JSONObject mJson = new JSONObject(); // 创建json跟对象的子对象,里面存放对个实体类的值的json数组 JSONArray jsonArray = new JSONArray(); mJson.put("statusCode", "ok"); for (Entry entry : entries) { if (!entry.getPhone().contains(data)) continue; JSONObject json = new JSONObject(); json.put("name", entry.getName()); json.put("phone", entry.getPhone()); json.put("url", entry.getUrl()); jsonArray.add(json); } mJson.put("entries", jsonArray); response.setContentType("text/html;charset=UTF-8"); response.getWriter().write(mJson.toString());
五、注意事项(待续。。。)
1. 编码格式问题
2. android中HttpClient请求并发问题
3.http请求中一些参数的详解和设置
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。