android http post 請求與 json字串

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   ar   color   os   使用   

一、目標

  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請求中一些參數的詳解和設定

android http post 請求與 json字串

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.