天天看點

通過開源架構AsyncHttpClient擷取Json資料

json詳細解析可見 http://redarmychen.iteye.com/blog/980243

json是javascript object notation的縮寫,可見json來源于javascript。json資料是一系列鍵值對的集合。

下面的代碼就是一個json:

{   

"phone" : ["12345678", "87654321"], // 數組   

"name" : "tianjiefeng", // 字元串   

"age" : 100, // 數值   

"address" : { "country" : "china", "province" : "jiangsu" }, // json對象   

"married" : false // 布爾值   

json是以key/value的形式存在的,key是strng類型的,value的類型可以是一個數組,可以是一個字元串,可以是一個數值,也可以是一個布爾值,甚至可以是一個json對象

我們對json有一定了解之後,接下來,讓我們來了解android中對json的解析

同樣我們和之前項目類似。采用開源架構來編寫程式。

1.引入jar檔案

2.添加網絡權限

3.建立用戶端對象

4.處理get請求,在get請求中new出jsonhttpresponsehandler對象

5.傳回jsonobject對象或者jsonoarray對象(jsonoarray對象周遊json數組)

6.jsonobject對象get(“屬性名”),getstring(“屬性名”),getint(“屬性名”)等方法來擷取指定屬性名的值

通過開源架構AsyncHttpClient擷取Json資料

2.添加通路網絡權限

<uses-permission android:name="android.permission.internet"/>

3.activity主要代碼:代碼中有詳細注釋,請認真觀看

package com.example.android_json;  

import org.apache.http.header;  

import org.json.jsonarray;  

import org.json.jsonexception;  

import org.json.jsonobject;  

import com.loopj.android.http.asynchttpclient;  

import com.loopj.android.http.jsonhttpresponsehandler;  

import android.os.bundle;  

import android.app.activity;  

import android.view.menu;  

import android.widget.toast;  

public class mainactivity extends activity {  

    @override  

    protected void oncreate(bundle savedinstancestate) {  

        super.oncreate(savedinstancestate);  

        setcontentview(r.layout.activity_main);  

        // http://172.16.237.200:8080/video/jsonservlet  

        initdata();  

    }  

    private void initdata() {  

        // 建立用戶端對象  

        asynchttpclient client = new asynchttpclient();  

        string url = "http://172.16.237.200:8080/video/jsonservlet";  

        toast.maketext(this, "發送請求到伺服器", 0).show();  

        client.get(url, new jsonhttpresponsehandler() {  

            //傳回jsonobject對象|jsonoarray對象  

            @override  

            public void onsuccess(int statuscode, header[] headers,  

                    jsonarray response) {  

                // todo auto-generated method stub  

                super.onsuccess(statuscode, headers, response);  

                if (statuscode == 200) {  

                    //周遊json數組  

                    for (int i = 0; i < response.length(); i++) {  

                        try {  

                            // 擷取具體的一個jsonobject對象  

                            jsonobject obj = response.getjsonobject(i);  

                            //jsonobject對象get(“屬性名”),getstring(“屬性名”),getint(“屬性名”)等方法來擷取指定屬性名的值  

                            system.out.println("序号" + obj.getstring("id")  

                                    + "--------姓名:" + obj.getstring("name")  

                                    + "--------密碼:" + obj.getstring("pass")  

                            + "--------其他:" + obj.getstring("pass"));  

                        } catch (jsonexception e) {  

                            // todo auto-generated catch block  

                            e.printstacktrace();  

                        }  

                    }  

                }  

            }  

        });  

}  

在控制台輸出結果:

通過開源架構AsyncHttpClient擷取Json資料

例如:

//周遊json數組  

for (int i = 0; i < response.length(); i++) {  

    try {  

        // 擷取具體的一個jsonobject對象  

        jsonobject obj = response.getjsonobject(i);  

        //jsonobject對象get(“屬性名”),getstring(“屬性名”),getint(“屬性名”)等方法來擷取指定屬性名的值  

        system.out.println("序号" + obj.getstring("id")  

                + "--------姓名:" + obj.getstring("name")  

                + "--------性别:" + obj.getstring("sex")  

                + "--------密碼:" + obj.getstring("pass"));  

    } catch (jsonexception e) {  

        // todo auto-generated catch block  

        e.printstacktrace();  

運作效果如下

通過開源架構AsyncHttpClient擷取Json資料

解析:json檔案中沒有sex字段,若我 們在程式中寫入則會報如上錯誤,所有在編寫程式的時候應多加注意字段的對應。

開源架構資源:http://download.csdn.net/detail/zhaoyazhi2129/7400787

源碼:http://download.csdn.net/detail/zhaoyazhi2129/7400807