天天看點

Http Post發送json序列請求(json序列化和反序列化)

項目中竟然遇到了這樣的問題,要求用戶端請求的方式為:參數按照json序列化,然後使用post方式傳遞給伺服器。第一次看到這個東東有點一頭霧水,剛開始開發的時候全部使用的get請求方式,因為當時公司不考慮資料安全問題。後來使用了post方式,使用到了session。這下倒好接觸了序列化json,然後post方式送出。

首先需要引用谷歌的gson.jar檔案,這裡面有一些序列化參數的方法,我用到的比較簡單直接使用了tojson(類名字);   定義最外層的類postargs:

裡面嵌套baserequest類,

接着是第三層userinfo類:

在主程式裡測試為:

輸出結果為:

這樣就完成了json的序列化。接下來就是把序列化的資料以post的方式送出給伺服器了。

關鍵語句就兩行:

new一個stringentity,然後把這個當做request的參數設定進去就ok了。

現在用戶端基本上傳回值基本上也是json格式的值了,post之後傳回的字段就可以使用反序列化的方式了。參考http://blog.csdn.net/walker02/article/details/8105936

android開發中相當便捷的json反序列化實作(含源代碼) 連帶有handler和進度條功能

      在開發的應用程式的過程中,我相信json是使用最多的輕量級的資料交換格式,這裡我就不介紹有關json的概念了。主要說明一下有關json反序列化的問題,一般情況下我們解析json都是下邊這種方式:

[java] view

plaincopy

try {  

    jobj = new jsonobject(resultstring);  

} catch (jsonexception e) {  

    // todo auto-generated catch block  

    e.printstacktrace();  

}  

resultstring是json類型的字元串,當轉化為jsonobject類之後,我們還需要一個一個的去解析資料,

int status =jobj.getint("status");  

string msgstring = jobj.getstring("msg");  

你是不是會感覺到這樣很麻煩呢,特别是對于用的比較多的值得時候。谷歌也發現了這個問題,他們開發出了一個json反序列化包。我們可以将傳回的鍵值格式轉化為類的格式,這個時候當我們再次使用的時候,就是類名.屬性名就可以擷取該變量的值了。我在這裡摘取幾行關鍵的代碼,

//httpget請求傳回結果  

    string str = common.requestapi("此處填寫url位址 ");  

    system.out.println("str" + str);  

    //json反序列化函數  

    magazinecategoryresp magazinecatagorylist = gson.fromjson(str, magazinecategoryresp.class);  

    message message = new message();  

    message.what = 1;  

    //把類指派給message  

    message.obj = magazinecatagorylist;  

    //發送handler資訊  在handler裡面進行接收  

    handler.sendmessage(message);  

就這樣就可以實作json反序列化了,這是在handler裡面進行處理的,一般情況下我們都是通過網絡擷取json格式的資料的。反序列化之後我們就可以在handler裡面接受該類,然後就可以非常友善的使用變量值了。因為url是公司的,是以我注釋掉了,傳回值的類型在源代碼裡我把列印出來資訊放到了注釋裡,這次得到的編碼格式不是utf-8的,大家湊合着看吧。

handler裡面處理資料代碼

handler handler = new handler(){  

    @override  

    public void handlemessage(message msg) {  

        switch (msg.what) {  

        case 1:  

            //反序列化結果在handler裡使用  

            magazinecategoryresp magazinecatagorylist = (magazinecategoryresp) msg.obj;  

            //這裡列印檢視結果  可以以類的方式擷取json值  

            system.out.println("result=" + magazinecatagorylist.data.get(0).name);  

            tvtest.settext(magazinecatagorylist.data.get(0).name);  

            break;  

        }  

        super.handlemessage(msg);  

    }  

};  

結果隻是測試用的,是以直接使用了get(0)

    這裡也使用了handler機制,還有進度條的使用,如果有不懂得可以去論壇裡找相關的教程和例子。csdn上也有很多大牛的部落格裡也有提及。

代碼下載下傳