zoukankan      html  css  js  c++  java
  • 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 请求

  • 相关阅读:
    MySQL系列(二)
    MySQL系列(一)
    RabbitMQ的安装部署
    RabbitMQ原理介绍
    消息中间件metaq
    消息中间件之zookper安装部署
    ZooKeeper基本原理
    消息中间件剖析
    了解Node.js
    windows下使用Git
  • 原文地址:https://www.cnblogs.com/LuLei1990/p/4147239.html
Copyright © 2011-2022 走看看