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请求中一些参数的详解和设置

时间: 2024-10-07 08:07:39

android http post 请求与 json字符串的相关文章

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

android通过httpClient请求获取JSON数据并且解析:http://www.cnblogs.com/gzggyy/archive/2013/05/08/3066288.html Android--使用Http向服务器发送请求并取得返回结果,下载图片:http://www.2cto.com/kf/201307/229489.html Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据):http://blog.csdn.net/he

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

在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式,如果使用SAX解析方式,则可以一边加载一边解析,对于数据量比较大的应用,比较适合.今天主要整理一下使用Gson解析json格式字符串的简单使用. 首先,必须导入外部包 /** * * @author ZhaoKaiQiang * * @time 2014年5月4日 */ public class J

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

[1].[图片] Json字符串和highcharts数据图表展现.jpg 跳至 [1] [2] [2].[代码] Json字符串和highcharts数据图表展现 跳至[1] [2] 001 /* 002 * Filename: OQtyOrPriceReport.js 003 * Description:客户订单数量和价格报表分析 004 * Created: 2013.11.14 005 * Author : liangjw 006 * Company:Copyright (C) 2013

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

1. 返回json字符串如何处理 $.ajax({ url:xxx, success:function(date){ }, error:function(){ } }); 通过最原始的返回: PrintWriter out = httpServletResponse.getWriter(): ObjectMapper mapper = new ObjectMapper(); Map map = new HashMap(); map.put("name","zz");

httpclient工具类,post请求发送json字符串参数,中文乱码处理

在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文的时候在发送端数据正常但是到了服务器端就中文乱码了. 解决办法: 发送端进行设置编码如下: 工具类: 1 package com.Util; 2 3 import com.google.common.base.Charsets; 4 import org.apache.http.HttpEntity

@RequestBody接收ajax的json字符串

在使用ajax进行请求,并传递参数时,偶尔需要把数组作为传递参数,这是就要使用@RequestBody来解决这个问题 在页面端的处理: (1)利用JSON.stringify(arr)需要把json对象数组转变成一个json对象字符串 (2)在ajax的参数中设置"contentType": "application/json" $(function(){ $("#exe").on("click",function(){ va

Java后台解析android端发送的JSON字符串

在设备通讯中,往往会用到数据交互.我们这里用的是通过HTTP协议发送JSON数据,android客户端把数据进行打包,发送到后台服务器,后台解析出来. //android客户端拼装JSON字符串 //如下的拼装结果为: {"data":[{"id":"12345","name":"张三"},{"id":"54321","name":"李四

请求要素是json字符串时,php如何获取原生请求体

php 常见问题及解决方法 (1)请求要素是json字符串,后台如何获取 //this is a common php library by huangwei , //date:2014-07-03 //see http://blog.sina.com.cn/s/blog_4657e98e0100dyxp.html //see http://www.cnblogs.com/fullhouse/archive/2012/04/24/2468870.html if(array_key_exists(

ios 解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为&lt;null&gt;无法保存在userDefault的问题

解决数据请求json解析字典后,由于java某些类库转换json字符串后出现键值为<null>无法保存在userDefault. 打印下得到的字典数据: “username”=<null> 此时如果将字典保存到userDefault中会报错 所以需要遍历字典将其替换 for (NSString*s in [Dict1 allKeys]) { if ([Dict1[s] isEqual:[NSNull null]]) { [Dict1 setObject:@""