項目中竟然遇到了這樣的問題,要求用戶端請求的方式為:參數按照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上也有很多大牛的部落格裡也有提及。
代碼下載下傳