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(
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请求中一些参数的详解和设置
4. android 发https 请求
android http post 请求与 json字符串的更多相关文章
- Android okHttp网络请求之Json解析
前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...
- wemall app商城源码中基于JAVA通过Http请求获取json字符串的代码
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.分享其中关于通过Http请求获取json字符串的代码供 ...
- ajax请求返回json字符串/json对象 处理
1. 返回json字符串如何处理 $.ajax({ url:xxx, success:function(date){ }, error:function(){ } }); 通过最原始的返回: Prin ...
- ajax post 请求发送 json 字符串
$.ajax({ // 请求方式 type:"post", // contentType contentType:"application/json", // ...
- ajax请求返回Json字符串运用highcharts数据图表展现数据
[1].[图片] Json字符串和highcharts数据图表展现.jpg 跳至 [1] code=26754#44745" rel="nofollow"> [2] ...
- 【Android进阶】Gson解析json字符串的简单应用
在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式, ...
- android通过httpClient请求获取JSON数据并且解析
使用.net创建一个ashx文件,并response.write json格式 public void ProcessRequest(HttpContext context) { context.R ...
- post请求参数Json字符串包含数组的校验和处理 -工作随记-备查工具
package com.xxxx.live.webapp.selvert; import java.io.BufferedReader; import java.io.IOException; imp ...
- post请求参数Json字符串包含数组的校验和处理
传入参数类型 {"aaa":"aaaa","bbb":"bbb","ccc":"ccc&q ...
随机推荐
- 查询续与ajax
查询分组 事例:统计不止一个作者的图书:(作者数量大于一) Book.objects.all().values('name').annotate(author_num=Count('authors__ ...
- light oj 1236 - Pairs Forming LCM & uva 12546 - LCM Pair Sum
第一题给定一个大数,分解质因数,每个质因子的个数为e1,e2,e3,……em, 则结果为((1+2*e1)*(1+2*e2)……(1+2*em)+1)/2. 代码如下: #include <st ...
- nginx和php-fpm的用户权限
启动php-fpm sudo php-fpm -c /etc/php.ini [17-Sep-2018 00:36:59] ERROR: [pool www] please specify user ...
- 输入sql语句,将结果写入到xml文件
import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import j ...
- java笔记之方法
一.那么什么是方法呢? 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 二.方法的优点 ...
- 大内密探HMM(转)
源地址:http://blog.csdn.net/ppn029012/article/details/8923501 1. 赌场风云(背景介绍) 最近一个赌场的老板发现生意不畅,于是派出手下去赌场张望 ...
- React中的Keys
前言 当你在React当中渲染列表项的时候,React会尝试存储对应每个单独项的相关信息,如果你的组件包含state状态数据,那么这些状态数据必须被排序. 当你想要更新这些列表项的时候,React必须 ...
- 94.Txx考试
2894 Txx考试 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description Txx是一个成绩很差的人,考试便成了他 ...
- Linux上安装使用SSH(ubuntu&&redhat)
转自:http://blog.csdn.net/zxs9999/article/details/6930736 Ubuntu安装使用SSH ubuntu默认并没有安装ssh服务,如果通过ssh链接ub ...
- c#中的??运算符
注意啦,c#中的??运算符是和?:运算符是不同的,这两者是有区别的. ??运算符称为null合并运算符,用于定义null值的类型和引用类型的默认值. 只当运算符的左操作数不为 null,此运算符将返回 ...