Android用GSon处理Json数据

 

此篇接上篇 Android访问WCF(下篇)-客户端开发 将服务器获取的JSON数据通过GSON这个类库, 进行反序列化, 并通过UI显示出来.

如何在Android平台上用GSON反序列化JSON数据, 参考了这篇文章 http://benjii.me/2010/04/deserializing-json-in-android-using-gson/

一. 建立我们包装好的Http请求类文件 WebDataGetApi.java

二. 建立JsonDataGetApi.java

三. 建立Android端Account模型Account.java

四. 在我们的主Activity中调用刚才的方法, 在这一步中我们需要引入Google的gson 库gson-1.6.jar至我们的工程(下载地址)
五.我们开始构建UI

打开layout下的main.xml

在配置好RunConfiguration之后,我们开始运行程序,  查看Log发现有以下错误,

意思是说访问被禁止,也就是未授权访问,  其意思并不是我们的服务未授权, 因为Andriod具有很好的很好很好的安全机制, 我们要访问网络必须要经过授权才可以;

我们打开res目录下AndroidManifest.xml, 注意字体加粗放大的那句, 就是给我们的程序加入Internet的访问授权.

再次运行程序, 会发现显示如下:

 

 

从上图中的statuscode = 200来看,说明我们的请求已经成功, 问题出现在Json Parse(Json数据转换/反序列化/格式化)的过程中, 我们现在把从服务器传过来的数据拿出来看看, 在浏览器输入我们的服务地址: http://localhost:82/AccountService/Json/GetAccountData 

[
 {
     "Address": "YouYi East Road",
     "Age": 56,
     "Birthday": "/Date(1298605481453+0800)/",
     "Name": "Bill Gates"
 },
 {
     "Address": "YouYi West Road",
     "Age": 57,
     "Birthday": "/Date(1298605481453+0800)/",
     "Name": "Steve Paul Jobs"
 },
 {
     "Address": "YouYi North Road",
     "Age": 65,
     "Birthday": "/Date(1298605481453+0800)/",
     "Name": "John D. Rockefeller"
 }
]

我们发现其中的Birthday的结果并非我们想象中yyyy-mm-dd HH:mm:ss类型, 究其原因可以查看MSDN文章《JavaScript 和 .NET 中的 JavaScript Object Notation (JSON) 简介

现在我们给我们的GsonBuilder指定Date的序列化方法, 先增加一个Date反序列化的类DateDeserializer.java

其次修改Activity类中的GetDate方法如下, 注意其中加粗的部分.
我们现在再运行程序 :

 

执行成功.

示例下载

posted @ 2011-07-22 15:29  cpcpc  阅读(6979)  评论(0编辑  收藏  举报