网络数据协议及解析(高级).pdf

上传人:李主任 文档编号:3335007 上传时间:2019-08-13 格式:PDF 页数:28 大小:878.54KB
返回 下载 相关 举报
网络数据协议及解析(高级).pdf_第1页
第1页 / 共28页
网络数据协议及解析(高级).pdf_第2页
第2页 / 共28页
网络数据协议及解析(高级).pdf_第3页
第3页 / 共28页
网络数据协议及解析(高级).pdf_第4页
第4页 / 共28页
网络数据协议及解析(高级).pdf_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《网络数据协议及解析(高级).pdf》由会员分享,可在线阅读,更多相关《网络数据协议及解析(高级).pdf(28页珍藏版)》请在三一文库上搜索。

1、网络数据协议及解析网络数据协议及解析 Android平台手机应用开发技术培训 高级.第9讲 学习目标: 目标学员: 课程时长:45分钟 有Android中级水平的开发者或在校 计算机相关专业大学生 学习并了解XML及JSON的相关知识 掌握在Android中使用XML及JSON的技 巧 课程计划课程计划 XML介绍 XML的使用 JSON介绍 课程目录课程目录 JSON的使用 课程计划 本次关于网络数据协议的课程分为一,二两个部分 第一部分将主要讲解以下几个知识点: XML在Android中的使用 JSON在Android中的使用 XML与JSON的演练 第二部分则在第一部分的基础上,介绍常用

2、的网络通讯协议,同时以实例示 范互联网软件的开发 课程计划 XMLXML介绍介绍 XML的使用 JSON介绍 课程目录课程目录 JSON的使用 XML简介 XML(Extensible Markup Language)即可扩展标记语言。 XML 被设计用来结构化,传输和存储数据。 XML是纯文本,天生就独立于软件和硬件。 XML是W3C的推荐标准。至今,已可以说是无处不在。 XML有健全完整的技术支持,在各平台下都有其适用的工具和类库。 XML的语法 任何的起始标签都必须有一个结束标签。 XML标签对大小写敏感 可采用简化标签同时表示起始和结束:在大于符号前跟一个斜线(/)。 标签必须按顺序嵌

3、套。没有关闭所有内部括号前不能关闭外面的括号。 所有的属性都必须有值,并且值需要用双引号包裹。 相当于 XML的语法 使用“”括起来的部分是注释。注释不能嵌套,文本中不能出现字符 “-”或“。不能把注释放在标记之中,或实体声明之前或实体声明中。 XML文档必须有一个元素是所有其他元素的父元素(根元素)。 XML中一些字符拥有特殊的意义(如,/等)。如果在XML节点内容中包含 这些字符,它们需要被转义字符替代。XML中有下面5个字符需要转义: . XML方案的选择 DOM(Document Object Model,文档对象模型) SAX(Simple API for XML,XML的简单API

4、) StAX(Streaming API for XML ,XML的流式API) Xmlpull(XML推式API) 下面将例举如何选择合适的API来处理XML 如果打算对数据作出更改并将它输出为XML,那么DOM是适当的选择。 并不是说使用 SAX 就不能更改数据,但是该过程要复杂得多。 对于大型XML内容,SAX 是更好的选择,DOM占用太多内存。 如果只有数据中的少量部分会被使用,那么使用SAX来将该部分数据提 取到应用程序中可能更好。但是,如果以后会回头引用已处理过的信息,那j 就最好选择DOM。 SAX 实现通常要比 DOM 实现更快。 在内存非常苛刻的情况下,可以考虑使用StAX或

5、者Xmlpull。 课程计划 XML介绍 XMLXML的使用的使用 JSON介绍 课程目录课程目录 JSON的使用 Android中如何使用XML 下面是Android提供XML功能的包: javax.xml 根据 XML 规范定义核心 XML 常量和功能 javax.xml.parsers 提供DOM和SAX方法解析XML文档 org.w3c.dom W3C提供的使用DOM方法读取XML org.xml.sax 提供核心SAX APIs org.xmlpull.v1 提供了供资源有限的环境所使用的APIs 下面我们将直接通过一些示范来简单介绍XML的创建和解析过程。请注意如 下的XML测试内

6、容。 12345 joke title this is a joke 项目演练 为笑话大全的Joke类实现XML序列化和反序列化功能。 下面是使用SAX进行序列化的代码 public String XMLSerialize() throws Exception XmlSerializer s = Xml.newSerializer(); StringWriter writer = new StringWriter(); s.setOutput(writer); s.startDocument(“UTF-8“, true); s.startTag(null, “joke“); s.startTa

7、g(null, “joke_id“).text(Integer.toString(joke_id).endTag(null, “joke_id“); s.startTag(null, “joke_title“).text(joke_title).endTag(null,“joke_title“); s.startTag(null, “joke_text“).text(joke_text).endTag(null, “joke_text“); s.endTag(null, “joke“); s.endDocument(); return writer.toString(); 项目演练 下面是用D

8、OM接口实现的Joke的反序列化功能 public void XMLDeserialize(String xmlSource) throws Exception DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); ByteArrayInputStream bais = new ByteArrayInputStream(xmlSource.getBytes(); Document doc = db.parse(bais);

9、 Element root = doc.getDocumentElement(); NodeList child = root.getChildNodes(); joke_id = Integer.parseInt( child.item(0).getFirstChild().getNodeValue(); joke_title = child.item(1).getFirstChild().getNodeValue(); joke_text = child.item(2).getFirstChild().getNodeValue(); 项目演练 下面是用XmlPull接口实现的Joke的序列

10、化功能 public String XMLPULLSerialize() throws Exception XmlSerializer s = XmlPullParserFactory.newInstance().newSerializer(); StringWriter writer = new StringWriter(); s.setOutput(writer); s.startDocument(“UTF-8“, true); s.startTag(null, “joke“); s.startTag(null, “joke_id“).text(Integer.toString(joke_

11、id).endTag( null, “joke_id“); s.startTag(null, “joke_title“).text(joke_title).endTag(null, “joke_title“); s.startTag(null, “joke_text“).text(joke_text).endTag(null, “joke_text“); s.endDocument(); return writer.toString(); 项目演练 下面是用XmlPull接口实现的Joke的序列化功能(关键代码) int eventType = p.getEventType(); while

12、(eventType != XmlPullParser.END_DOCUMENT) if (eventType = XmlPullParser.START_TAG) if (p.getName().equals(“joke_id“) p.next(); joke_id = Integer.parseInt(p.getText(); else if (p.getName().equals(“joke_title“) p.next(); joke_title = p.getText(); else if (p.getName().equals(“joke_text“) p.next(); joke

13、_text = p.getText(); eventType = p.next(); 项目演练 最后为Joke类添加XML测试,并且在应用启动时执行它 最终执行项目时会在LogCat之中看到如下输出: xmlpullserialize“joke_id“:12345,“joke_title“:“joke title“,“joke_text“:“this is a joke“ xmlpulldeserializejoke title xmlpulldeserializethis is a joke String str = joke.XMLPULLSerialize(); System.out.p

14、rintln(“xmlpullserialize“ + str); Joke newJoke = new Joke(); newJoke.XMLPULLDeserialize(str); System.out.println(“xmlpulldeserialize“ + newJoke.joke_title); System.out.println(“xmlpulldeserialize“ + newJoke.joke_text); 课程计划 XML介绍 XML的使用 JSONJSON介绍介绍 课程目录课程目录 JSON的使用 JSON简介 JSON( JavaScript Object Na

15、tation )是一种轻量级的数据交换格式。 易于阅读和编写,同时也易于机器解析和生成。 采用完全独立于语言的文本格式,但是使用了类似于C语言的习惯。 JSON最初是为JavaScript准备的,但后来发现它与XML一样, 为开发者提供 了另一种简单,灵活的数据交换格式。 JSON在软件开发领域也有着极高的人气,同时具备各平台和开发语言的完整 支持。 JSON的语法 String,字符串 是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符 (character)即一个单独的字符串(character string)。 Boolean,布尔值 它的内容只能是true或者f

16、alse,用于表达真伪。 null,空 JSON中允许使用null作为值,表示什么都没有。 Number,数字 与多数变成语言中的数字类似,但JSON不需要强制指定类型。同时去除了八 进制和十六进制。 JSON的语法 Value,值 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、 对象(object)或者数组(array)。这些结构可以嵌套。 Object,对象 无序的“名称/值对”集合。以“” 开始,“” 结束。每个“名称”后跟一个“:”(冒 号);“名称/值 对”之间使用“,”(逗号)分隔。 名称需要加双引号。 Array,数组 值(v

17、alue)的有序集合。一个数组以“” 开始,“” 结束。值之间使用“,” 分隔。 “username“:“小明“, “password“:“123“ “广州“,“深圳“,“珠海“ “字符串“,123,true,false,null,“age“:123,1,2,3 课程计划 XML介绍 XML的使用 JSON介绍 课程目录课程目录 JSONJSON的使用的使用 Android中如何使用JSON Android中处理JSON的包是org.json,实际上它是JSON的标准Java实现。 org.json包含四个类和一个异常: JSONArray 对应JSON中的Array,它代表一组有序的数值。

18、JSONObject 对应JSON中的Object,它是JSON定义的基本单元,其value可以是字 符串,Array,Boolean,Number等任意JSON类型。 JSONStringer 它可以帮组程序员严格按照JSON语法规则创建JSON字符串。 JSONTokener 为JSONObject和JSONArray构造器提供解析JSON字符串的功能。 JSONException JSON异常。 构造JSON字符串 Android中使用JSONStringer来创建JSON字符串。 array(),开始一个新JSON数组 endArray(),结束JSON数组 endObject(),结

19、束JSON对象 key(String s),增加一个key object(),开始一个JSON对象 toString(),转换成JSON字符串 value(),增加一个JSON的value 如下是一个示范: JSONStringer json = new JSONStringer(); json.object(); json.key(“joke_id“).value(joke_id); json.key(“joke_title“).value(joke_title); json.key(“joke_text“).value(joke_text); json.endObject(); retur

20、n json.toString(); 解析JSON字符串 只需要使用JSONObject的构造函数,即可完成JSON的解析 需要强调一下JSONObject可以是任何一种JSON元素(对象,数组,布尔值, 数字,字符串,空),也可以嵌套包含这些元素。 调用JSONObject的一系列get方法,即可访问该对象包含的元素(getInt, getString,getJSONObject,getJSONArray,getBoolean等)。例如: JSONObject jo = new JSONObject(jsonSource); JSONObject jo = new JSONObject(js

21、onSource); joke_id = jo.getInt(“joke_id“); joke_title = jo.getString(“joke_title“); joke_text = jo.getString(“joke_text“); 项目演练 为笑话大全的Joke类实现JSON序列化和反序列化功能 public void JSONDeserialize(String jsonSource) throws JSONException JSONObject jo = new JSONObject(jsonSource); joke_id = jo.getInt(“joke_id“);

22、joke_title = jo.getString(“joke_title“); joke_text = jo.getString(“joke_text“); public String JSONSerialize() throws JSONException JSONStringer json = new JSONStringer(); json.object(); json.key(“joke_id“).value(joke_id); json.key(“joke_title“).value(joke_title); json.key(“joke_text“).value(joke_tex

23、t); json.endObject(); return json.toString(); 项目演练 为Joke类添加JSON测试,并且在应用启动时执行它 最终执行项目时会在LogCat之中看到如下输出: jsonserialize“joke_id“:12345,“joke_title“:“joke title“,“joke_text“:“this is a joke“ jsondeserializejoke title jsondeserializethis is a joke String str = joke.JSONSerialize(); System.out.println(“jsonserialize“ + str); Joke newJoke = new Joke(); newJoke.JSONDeserialize(str); System.out.println(“jsondeserialize“ + newJoke.joke_title); System.out.println(“jsondeserialize“ + newJoke.joke_text); 总结 Android中如何使用XML Android中如何使用JSON 本课程到此结束,谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 装饰装潢


经营许可证编号:宁ICP备18001539号-1