最近在做Android從服務端拉取數據,采用doget方式向服務器請求數據。服務端經過Sql查詢后得到的ResultSet結果集以json的形式返回。所以重點解決一下數據集是如何封裝成json,以及在客戶端又是如何把返回的json數據流重組成原數據
開始之前先大概說一下json的一些東西:
json格式其實質可看成一個字符串流,只不過它帶有json特有的格式: [{},{},{}...,{}],中括號[]代表的是jsonarray,而其中的花括號{}代表的是jsonobject,json格式的具體情況讀者可百度一下,很容易理解
開始正題:
先看數據的結構:
作為演示,采用下列數據集:
也即:data中的數據如下結構
{"title":"這是一個標題0","image":"這是圖片0","info":"這是一個詳細信息0"},
{"title":"這是一個標題1","image":"這是圖片1","info":"這是一個詳細信息1"},
{"title":"這是一個標題2","image":"這是圖片2","info":"這是一個詳細信息2"},
{"title":"這是一個標題3","image":"這是圖片3","info":"這是一個詳細信息3"},
{"title":"這是一個標題4","image":"這是圖片4","info":"這是一個詳細信息4"},
{"title":"這是一個標題5","image":"這是圖片5","info":"這是一個詳細信息5"},
...........................(共20組)
數據庫執行查詢后獲得的resultset,其結構正如上面所示,具體的數據會有不同,上述只是舉例方便,下面的操作讀者可自行類比
服務端:
1.將resultset中的數據提取到 List<Map<String, Object>> 結構中:
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
2. 將data轉化為JSONArray
3.將data轉化為JSONArray后返回給客戶端:
客戶端:
接收到的json數據是流的形式,下面要做的就是將服務器以json格式封裝起來的resultset還原回來,將json流重組成List<Map<String, Object>> data
1.在executeHttpGet中獲取json格式的接收值,存入String類型的變量中,假設該變量是:receivestring
2.將該receivestring轉化為jsonarray:
3.reJsonArray中包含了上述的20個jsonobject,所以現在就需要遍歷reJsonArray,將每個jsonobject中所攜帶的key-value對存入map<>中,此處若有不解,先看一下上面的那個存儲結構,再結合下面的代碼就很好理解了:
4.經過上述三步,json流就被還原成了List<Map<String, Object>>結構
總結起來,數據的形式變化經歷了這樣一個過程:
服務端查詢出resultset ------>>> resultset存入List<Map<String, Object>>結構。
------>>> 將該List<Map<String, Object>>結構中的數據轉換為json格式返回客戶端。
------>>> 客戶端接收到該json流。 ------>>> 將該json流還原成List<Map<String, Object>>結構以供使用
最后貼個我的運行結果圖:(得到這個list<Map<String, Object>>結構后后面的操作真真就靈活了很多了,想怎么來就怎么來)
附下演示的源碼 核心是resultset轉json 以及json的還原
鏈接:http://pan.baidu.com/s/1dFyj1NN 密碼:xwn8