一、目标

  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字符串的更多相关文章

  1. Android okHttp网络请求之Json解析

    前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...

  2. wemall app商城源码中基于JAVA通过Http请求获取json字符串的代码

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.分享其中关于通过Http请求获取json字符串的代码供 ...

  3. ajax请求返回json字符串/json对象 处理

    1. 返回json字符串如何处理 $.ajax({ url:xxx, success:function(date){ }, error:function(){ } }); 通过最原始的返回: Prin ...

  4. ajax post 请求发送 json 字符串

    $.ajax({ // 请求方式 type:"post", // contentType contentType:"application/json", // ...

  5. ajax请求返回Json字符串运用highcharts数据图表展现数据

    [1].[图片] Json字符串和highcharts数据图表展现.jpg 跳至 [1] code=26754#44745" rel="nofollow"> [2] ...

  6. 【Android进阶】Gson解析json字符串的简单应用

    在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式, ...

  7. android通过httpClient请求获取JSON数据并且解析

    使用.net创建一个ashx文件,并response.write  json格式 public void ProcessRequest(HttpContext context) { context.R ...

  8. post请求参数Json字符串包含数组的校验和处理 -工作随记-备查工具

    package com.xxxx.live.webapp.selvert; import java.io.BufferedReader; import java.io.IOException; imp ...

  9. post请求参数Json字符串包含数组的校验和处理

    传入参数类型 {"aaa":"aaaa","bbb":"bbb","ccc":"ccc&q ...

随机推荐

  1. 查询续与ajax

    查询分组 事例:统计不止一个作者的图书:(作者数量大于一) Book.objects.all().values('name').annotate(author_num=Count('authors__ ...

  2. 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 ...

  3. nginx和php-fpm的用户权限

    启动php-fpm sudo php-fpm -c /etc/php.ini [17-Sep-2018 00:36:59] ERROR: [pool www] please specify user ...

  4. 输入sql语句,将结果写入到xml文件

    import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import j ...

  5. java笔记之方法

    一.那么什么是方法呢? 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 二.方法的优点 ...

  6. 大内密探HMM(转)

    源地址:http://blog.csdn.net/ppn029012/article/details/8923501 1. 赌场风云(背景介绍) 最近一个赌场的老板发现生意不畅,于是派出手下去赌场张望 ...

  7. React中的Keys

    前言 当你在React当中渲染列表项的时候,React会尝试存储对应每个单独项的相关信息,如果你的组件包含state状态数据,那么这些状态数据必须被排序. 当你想要更新这些列表项的时候,React必须 ...

  8. 94.Txx考试

    2894 Txx考试  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description Txx是一个成绩很差的人,考试便成了他 ...

  9. Linux上安装使用SSH(ubuntu&&redhat)

    转自:http://blog.csdn.net/zxs9999/article/details/6930736 Ubuntu安装使用SSH ubuntu默认并没有安装ssh服务,如果通过ssh链接ub ...

  10. c#中的??运算符

    注意啦,c#中的??运算符是和?:运算符是不同的,这两者是有区别的. ??运算符称为null合并运算符,用于定义null值的类型和引用类型的默认值. 只当运算符的左操作数不为 null,此运算符将返回 ...