软件开发工具:第13章 在手机客户端解析JSON_第1页
软件开发工具:第13章 在手机客户端解析JSON_第2页
软件开发工具:第13章 在手机客户端解析JSON_第3页
软件开发工具:第13章 在手机客户端解析JSON_第4页
软件开发工具:第13章 在手机客户端解析JSON_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、郑州大学信息工程学院 第13章在手机客户端解析JSON点击添加文本郑州大学信息工程学院13.1 JSON简介13.2 服务器端生成JSON数据13.3 在手机客户端解析JSON13.4 项目实战:“3G商城”本章内容概要客户端利用网络连接获取服务器数据的实现原理浏览器客户端TCP、HTTP协议服务器端JavaEE服务器(Tomcat、WebLogic)HTMLXMLJSON背景知识回顾AndroidiOSWindows PhoneHttp服务器(Apache)其他WebService服务器数据对象当前采用最广的数据交换格式:JSON数据交换技术原理客户端服务器1.发送数据请求http requ

2、est3.返回数据结果http response2.将数据对象编码Html、xml、json4.将数据对象解码Html、xml、jsonhttp:/IP/TestServer/Json city:beijing , code:010, city:shanghai , code:021, city:xian , code:029本章讲述的技术服务端编码技术对象JSON字符串客户端解码技术JSON字符串对象网络数据传输技术实践将字符串通过网络进行传输利用HTTP协议、TCP协议均可Android网络开发特点:多线程技术、异步任务(AsyncTask)类的支持JSON是什么JSON 指的是 Java

3、Script 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSON 具有自我描述性,更易理解 JSON 易于机器解析和生成,并且易于书写和阅读JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 跟XML一样独立于语言和平台。curl -get -include /heweather/weather/free?city=beijing -H apikey:apikeyJSON与XML对比 类似 XML之处 JSON 是纯文本 JSON 具有“自我描述性”(人类可读) JSON 具有层级结

4、构(值中存在值) JSON 可通过 JavaScript 进行解析 JSON 数据可使用 AJAX 进行传输相比 XML 的不同之处 没有结束标签 更短 读写的速度更快 能够使用内建的方法进行解析 使用数组 不使用保留字 中国 黑龙江 哈尔滨 大庆 广东 广州 深圳 珠海 台湾 台北 高雄 新疆 乌鲁木齐 name: 中国, provinces: name: 黑龙江, citys: city: 哈尔滨, 大庆 , name: 广东, citys: city: 广州, 深圳, 珠海 , name: 台湾, citys: city: 台北, 高雄 , name: 新疆, citys: city:

5、乌鲁木齐 JSON 语法规则 JSON只有两种结构:对象和数组, 由这两种结构嵌套和组合来表示各式各样的数据。数据对象由一系列的属性/值对来表示数据对象和属性/值对由逗号分隔 花括号保存对象 方括号保存数组JSON 语法规则2JSON 值JSON 值可以是:数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true 或 false) 数组(在方括号中) 对象(在花括号中) nullJSON对象是一个无序的。一个对象以“”(左括号)开始,“”(右括号)结束。每个“名称”后跟一个“:”(冒号);“名称/值 对”之间使用“,”(逗号)分隔。如: “name”:”jackson”, “age”:10

6、0 JSON的数据格式数组是值(value)的有序集合。一个数组以“”(左中括号)开始,“”(右中括号)结束。值之间使用“,”(逗号)分隔如:“students”:“name”:”jackson”,“age”:100,“name”:”michael”,”age”:51 JSON的数据格式1JSON数据格式的定义 JSON的全称是:JavaScript Object Notation,是一种轻量级的数据交换格式。 (1)“名称/值”对的集合 (2)值的有序列表2JSON数据格式的特点JSON对象时一个无序的“名称/值对”的集合,一个对象以“”开始, 以“”结束,每个“名称”后跟一个“:”,名称/

7、值 对之间使用“,”分隔。复杂一点的情况,数组是值的有序集合,一个数组以“”(左中括号)开始,以“”(右中括号)结束。 students:name:jackson,age:100,name: michael, age: 51各开发平台对JSON的支持PHPPHP5默认支持JSON对象,早期版本需要引入新的lib。 $sJSONText = json_encode($oPerson); /编码 $oPerson = json_decode($sJSONText); /解码C#提供多个将c#对象序列化为JSON对象或相反的处理System.Runtime.Serialization.Json. D

8、ataContractJsonSerializerSystem.Web.Script.Serialization. JavaScriptSerializer JavaJava API for JSON Processing (JSR 353) 、JSON-lib 等开源Java类库用于把bean, map和XML转换成JSON并能够把JSON转回成bean和DynaBean C+JSONCPP等开源的开发类库 其它语言一般以类库lib方式支持JSON对象()There are many open-source JSON libraries for Java and other language

9、s; you can find a list of them at . Ex:Gson library from /p/google-gson/. Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。谷歌GSON技术FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson。功能强大,完全支持Java Bean、集合、Ma

10、p、日期、Enum,支持范型,支持自省。无依赖,能够直接运行在Java SE 5.0以上版本支持Android。开源 (Apache 2.0)阿里巴巴FastJson技术的介绍json-lib.jar重要API(java)JSON对象字符串MapJava对象JSONObjectArrayListJSONArrayJSON对象字符串JSONObjectJSONArray13.2 服务器端生成JSON数据 为了使得Java对象转换json更为简单容易,这里使用json-lib框架。 json-lib是一个Java类库,提供将Java对象转换成json,或者反向转换的功能。1. 浏览器调用 我们将j

11、sonserver工程编译发布到Tomcat上,并通过浏览器进行调用。http:/08:8080/jsonserver/servlet/JsonServlet?action_flag=person.person:id:1001,address:上海黄浦区,name:Jack我们会看到服务器端产生4种类型的json数据。传递参数为action_flag,服务器端根据action_flag 返回不同的json数据给客户端。2. jsonserver工程主要代码 JsonService用于产生包含有json数据的Java对象和容器对象。 JsonTool是将Java对象或容器对象装换为json数据的

12、,由于使用了json-lib,代码较为简单。import net.sf.json.JSONObject;public class JsonTool public static String creatJsonString(String key, Object value) JSONObject jsonObject = new JSONObject(); jsonObject.put(key, value); return jsonObject.toString(); JsonServlet的doGet方法调用了doPost方法,在doPost方法中,根据http请求参数action_flag

13、的不同,而调用JsonTool的不同实参的createJsonString方法。web.xml中须配置servlet映射如下: 13.3 在手机客户端解析JSON建立一个Android工程ParseJsonDemo,来访问服务器的json数据。我们建立的项目目录结构和ParseJsonDemo工程运行界面截图如下: ParseJjsonDemo工程运行界面Android客户端用GET分别获取服务器端返回的json数据,并将4种数据解析成4种结果类型(Person,List,List,ListMap),用Intent方式由MainActivity传递给ResultActivity,在Result

14、Actvity中显示解析的结果。2. 异步访问网络数据 当单击MainActivity主界面上的按钮时,便启动新线程异步访问网络数据,根据访问网络数据的不同情况,发送不同标识的Message给Handler处理。这里使用数字-2、1、2、3、4来作发送的Message的标识。 (1)-2表示网络异常,访问网络数据失败 (2)1表示访问的是可转换成Person格式的json接口,且访问网络数据成功 (3)2表示访问的是可转换成List格式的json接口,且访问网络数据成功(4)3表示访问的是可转换成List格式的json接口,且访问网络数据成功(5)4表示访问的是可转换成ListMap格式的js

15、on接口,且访问网络数据成功。3. Handler的handleMessage方法 MainActivity中的Handler根据接收到的Message的不同标识作不同的处理,用Intent将数据封装后,设置不同的click_flag标识,分别为“person”、“ persons”、“ listString”和“listMap”。4. 在ResultActivity中显示解析结果 ResultActvity根据Intent对象中不同的click_flag标识,对封装的数据作相应的解析,并把解析结果显示到手机界面。13.4 项目实战:“3G商城”(三) 在手机客户端异步访问网络数据的宽带列表和

16、宽带详情的json接口,并在手机客户端解析json数据,显示到手机屏幕。1数据库安装和Tomcat配置 这里我们安装的数据库是PostgreSQL 9.3(x86),双击postgresql-9.3.1-1-windows.exe,按默认安装即可,postgres的密码设置为1。我们在pqAdmin III中创建数据库market选中market数据库,右键选择“恢复”,弹出“恢复数据库”对话框,选择备份文件newmarket.backup,单击“恢复”,即可恢复market数据库的数据。我们先把mialab-3gmarket.war文件拷贝到Tomcat的webapps文件夹下,把postg

17、resql-9.3-1100.jdbc41.jar拷贝到Tomcat的lib文件夹。在Tomcat的conf文件夹下的context.xml文件中加入如下的代码:2服务器端json接口 宽带列表接口: 08:8080/mialab-3gmarket/3gmarket?cmd=duct&typeId=1000&page=1&pSize=20 宽带详情接口: 08:8080/mialab-3gmarket/3gmarket?cmd=&typeId=1000&id=100010033Android客户端总体框架和运行界面 Android客户端MobileMarketCity_3G_C工程(源码)目录

18、结构和主要运行界面图如图4程序主要流程 程序的入口是MarketApp的onCreate方法,得到MarketApp的单例,继而去执行主界面MainActivity的onCreate方法。(1)异步加载网络数据 在MarketCity_BroadBand_Activity的onCreate方法中启动了新线程MyThread,加载并解析第1页数据,每页具体宽带产品数据设为6条。通过MarketCity_BroadBandList_DataHelper的getBroadBand_Vector(String url)方法获得服务器器端的json数据,并转换成Vector类型。数据获取成功后,给Handler发送标识为1的Message。(2)Handler作相应的处理 Handler在handleMessage方法中,通过适配器将第1页的宽带数据与显示控件ListView绑定,并通知界面更新。marketcity_BroadBand_Adapter.setDatas_Search(datas);listView.setAdapter(marketcity_BroadBand_Adapter);marketcity_BroadBand_Adapter.notifyDataSetChanged();(3)分页的解决 如果具

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论