最近在做Android从服务端拉取数据,采用doget方式向服务器请求数据。服务端经过Sql查询后得到的ResultSet结果集以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的还原