收藏 分享(赏)

Android网络访问和Service组件.ppt

上传人:fcgy86390 文档编号:4444184 上传时间:2018-12-28 格式:PPT 页数:58 大小:2.19MB
下载 相关 举报
Android网络访问和Service组件.ppt_第1页
第1页 / 共58页
Android网络访问和Service组件.ppt_第2页
第2页 / 共58页
Android网络访问和Service组件.ppt_第3页
第3页 / 共58页
Android网络访问和Service组件.ppt_第4页
第4页 / 共58页
Android网络访问和Service组件.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

1、第 13讲 网络访问 3和 Service组件本章学习目标:u掌握 android调用 Web Serviceu掌握 android中 Socket编程u掌握 android中 Service使用客户端 服务器响应(response)请求(request)Web容器Servlet1Servlet2数据库课程回顾未来人们如何开发软件?uSaaS: Software as a Service(软件即服务)。将软件视为一种基础设施与服务,像 “自来水 ”一样的东西。u网络无所不在,网络可以看成是一个软件服务的聚合体,是一个超级大 “HUB”。u开发软件就是 “聚合服务 ”:大服务套小服务,这一服务调

2、用另一服务,基于互联网协同实现软件功能。u高度分布式、异构和跨平台。 4SOAuSOA( Service Oriented Architecture,面向服务的架构) 。以服务作为软件的基本构造块来 “组装 ”软件。uWeb Service是当前最成熟的一种 SOA技术。它将网站的功能封装为可复用的软件服务,供其他 Web应用程序调用。5Web Service的特点uWeb Service可看成是一个可复用的 Web应用程序组件uWeb Service是平台无关的uWeb Service是自说明的u可以使用一种统一的机制来在互联网上查找 Web Service6Web Service工作原理u

3、Web Service 驻留于 Web Server中u使用 UDDI机制查找符合要求的 Web Serviceu网络中的机器通过 SOAP协议进行通讯7SOAP 概述SOAP( 简单对象访问协议 )是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义u在协议栈中, SOAP XML 位于用来发送消息的传输协议之上,而位于特定领域的 XML 文档之下u目前的版本是 SOAP1.2SOAP例子SOAP消息SOA

4、P 元素是 SOAP 消息的根元素,包含一个可选的 SOAP Header 和一个必需的 SOAP Body 元素可选的并且可扩展的 元素,用于描述元数据( metadata), 比如安全性、事务处理和会话状态信息必需的 元素,包含发送者的 XML 文档(文档形式和 RPC形式)在接收者( SOAP中介)返回的响应信息中,可能包含 的元素,用来描述在阅读 SOAP 消息时遇到的任何异常情况W3C Note 指定了一种在 SOAP 消息中嵌入和描述 附件( attachment, 格式不限) 的方式android调用 Web Service案例 1手机号码:http:/ Web Service案

5、例 1分析 请求 SOAPandroid调用 Web Service案例 1分析 SOAP响应android调用 Web Service案例 1分析 实现android调用 Web Service案例 1分析 请求android调用 Web Service案例 1分析 读取结果Android Pull解析器读取 XMLuPull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用 parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个 switch对感兴趣的事件进行处理。当元素开始解析时,调用 parser

6、.nextText()方法可以获取下一个 Text类型节点的值。Pull解析 XML文件uXmlPullParser的事件类型:uSTART_DOCUMENTuEND_DOCUMENTuSTART_TAGuEND_TAGu方法uparser.next()uparser.nextText()ugetName();Pull解析 XML文件 -实例u public class PullService u public static List readXML(InputStream inputStream) throws IOExceptionu XmlPullParser parser = Xml.

7、newPullParser();u try u parser.setInput(inputStream, “UTF-8“);u int eventType = parser.getEventType();u u Person currentPerson = null;u List persons = null;u while (eventType != XmlPullParser.END_DOCUMENT) u switch (eventType) u case XmlPullParser.START_DOCUMENT:/文档开始事件 ,可以进行数据初始化处理u persons = new A

8、rrayList();u break;u case XmlPullParser.START_TAG:/开始元素事件u String name = parser.getName();u if (name.equalsIgnoreCase(“person“) u currentPerson = new Person();u currentPerson.setId(new Integer(parser.getAttributeValue(null, “id“);u Pull解析 XML文件 -实例u else if (currentPerson != null) u if (name.equalsI

9、gnoreCase(“name“) u currentPerson.setName(parser.nextText();/ 如果后面是 Text节点 ,即返回它的值u else if (name.equalsIgnoreCase(“age“) u currentPerson.setAge(new Short(parser.nextText();u u u break;u case XmlPullParser.END_TAG:/结束元素事件u if (parser.getName().equalsIgnoreCase(“person“) u currentPerson = null;u u br

10、eak;u u eventType = parser.next();u u inputStream.close();u return persons;u catch (Exception e) u e.printStackTrace();u u return null;u Pull解析 XML文件 -实例u /将内容保存至 XML文件u public static String writeXML(List persons, Writer writer)u XmlSerializer serializer = Xml.newSerializer();u try u serializer.setO

11、utput(writer);u serializer.startDocument(“UTF-8“, true);u /第一个参数为命名空间 ,如果不使用命名空间 ,可以设置为 nullu serializer.startTag(“, “persons“);u for (Person person : persons)u serializer.startTag(“, “person“);u serializer.attribute(“, “id“, person.getId().toString();u serializer.startTag(“, “name“);u serializer.te

12、xt(person.getName();u serializer.endTag(“, “name“);u serializer.startTag(“, “age“);u serializer.text(person.getAge().toString();u serializer.endTag(“, “age“);u serializer.endTag(“, “person“);u u Pull解析 XML文件 -实例userializer.endTag(“, “persons“);u serializer.endDocument();u return writer.toString();u

13、catch (Exception e) u e.printStackTrace();u u return null;uu 小结 - Android解析 XMLuDOM解析 XMLuPull解析 XMLuSAX解析 XML注:参考资料( Android解析 xml文件的 3种方式 .doc)Android利用 Ksoap2插件 调用 Web ServiceuKsoap2-Android是一个手机客户端解析和调用WebService的第三方包uKsoap2-Android 最新版本为 2.6.0( ksoap2-Android-assembly-2.6.0-jar-with-dependencie

14、s.jar) ;uKsoap2-Android优势uKsoap是 Enhydra.org的一个开源作品,是EnhydraME项目的一部分 ;u兼容性(对调用 dotNET或 Java等编写的 WebService解析都兼容 );u对 cmnet接入点 和 cmwap接入点的支持 ;Ksoap2-Android接口n Ksoap2-Android接口 org.ksoap2.SoapEnvelope; org.ksoap2.serialization.PropertyInfo; org.ksoap2.serialization.SoapObject; org.ksoap2.serializatio

15、n.SoapPrimitive; org.ksoap2.serialization.SoapSerializationEnvelope; org.ksoap2.transport.HttpTransportSE;n 常用类 SoapEnvelope; PropertyInfo; SoapObject; SoapPrimitive; SoapSerializationEnvelope; HttpTransport;Ksoap2-Android用法String SOAP_ACTION = namespace + “/“ + name; /获得 WebService方法的返回结果Object res

16、ultObj = null; /step1 指定 WebService的命名空间和调用的方法名SoapObject request = new SoapObject(namespace, name);/step2 设置调用方法的参数值 ,这里的参数名称最好和 WebService一致request.addProperty(“userName”,”9901”);request.addProperty(“userPassword“, “123”);/step3 生成调用 WebService方法的 SOAP请求信息 ,并指定 SOAP的版本SoapSerializationEnvelope env

17、elope = new SoapSerializationEnvelope( SoapEnvelope.VER11 );/注意这里,等价于 envelope.bodyOut = request; envelope.setOutputSoapObject(request);/设置是否调用的是 dotNet下的 WebServiceenvelope.dotNet = true;/step4 创建 HttpTransportSE对象HttpTransportSE ht = new HttpTransportSE(url);Ksoap2-Android用法/ step5 调用 WebServicetr

18、y ht.call(SOAP_ACTION, envelope);/ step6 使用 getResponse方法或者 getResult方法获得WebService方法的返回结果 resultObj = (Object)envelope.getResponse(); catch (XmlPullParserException e) resultObj=e.getMessage();Log.e(“XmlPullParserException错误 !“, e.getMessage(); catch (IOException e) resultObj=e.getMessage();Log.e(“IOException错误 !“, e.getMessage(); catch (Exception e)resultObj=e.getMessage();Log.e(“未知错误 “, e.getMessage();android调用 Web Service案例 2天气预报:http:/

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

当前位置:首页 > 网络科技 > 网络与通信

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报