最近学习android平台调用webWebService,学习了一篇不错的博客(http://blog.csdn.net/lyq8479/article/details/6428288),可惜是2011年时的方法,而不适合现在android4.0之后的android版本,所以通过一番学习和研究,总结如下。
web Service简介
通俗的理解:通过使用WebService,我们能够像调用本地方法一样去调用远程服务器上的方法。我们并不需要关心远程的那个方法是Java写的,还是PHP或C#写的;我们并不需要关心远程的方法是基于Unix平台,还是Windows平台,也就是说WebService与平台和语言无关。
Web Services是建立在HTTP、SOAP、WSDL等通用协议的基础之上,所以有必要了解一下SOAP和WSDL,之后的开发实例中会用到。
1.SOAP(Simple Object Access Protocol,简单对象访问协议)是一种轻量级的、简单的、基于XML的协议,被设计用于在分布式环境中交换格式化和固化信息的简单协议。也就是说,要进行通信,进行数据访问传输,就必须依赖于一定的协议,而SOAP正是WebService通信中所依赖的一种协议。
2. WSDL(WebServices Description Language,即Web服务描述语言)是一种用来描述Web服务的XML语言,它描述了Web服务的功能、接口、参数、返回值等,便于用户绑定和调用服务。它以一种和具体语言无关的方式定义了给定Web服务调用和应答的相关操作和消息。WSDL是一份xml文档,用于描述某个WebSerivce的方方面面。例如提供webservice手机号码相关信息查询的网站http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,打开该链接就可以看到一个xml文档,我们要做的就是要从中读取有用的信息,在之后的调用过程中使用。以下是部分该XML文件:
1 This XML file does not appear to have any style information associated with it. The document tree is shown below. 2 <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://WebXml.com.cn/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://WebXml.com.cn/"> 3 <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 4 <a href="http://www.webxml.com.cn/" target="_blank">WebXml.com.cn</a> <strong>国内手机号码归属地查询WEB服务</strong>,提供最新的国内手机号码段归属地数据,每月更新。<br />使用本站 WEB 服务请注明或链接本站:<a href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/</a> 感谢大家的支持!<br /> 5 </wsdl:documentation> 6 <wsdl:types> 7 <s:schema elementFormDefault="qualified" targetNamespace="http://WebXml.com.cn/"> 8 <s:element name="getMobileCodeInfo"> 9 <s:complexType> 10 <s:sequence> 11 <s:element minOccurs="0" maxOccurs="1" name="mobileCode" type="s:string"/> 12 <s:element minOccurs="0" maxOccurs="1" name="userID" type="s:string"/> 13 </s:sequence> 14 </s:complexType> 15 </s:element> 16 <s:element name="getMobileCodeInfoResponse"> 17 <s:complexType> 18 <s:sequence> 19 <s:element minOccurs="0" maxOccurs="1" name="getMobileCodeInfoResult" type="s:string"/> 20 </s:sequence> 21 </s:complexType> 22 </s:element> 23 ...... 24 </wsdl:definitions>
通过该文件,我们需要获取以下信息:
1)从代码行号2中xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"得知SOAP协议版本是SOAP1.2
2)从代码行号2中targetNamespace="http://WebXml.com.cn/"得知命名空间"http://WebXml.com.cn/
3)从代码行号8中得知查询号码归属地调用方法名称为"getMobileCodeInfo"
4)从代码行11、12中分别得知调用该方法需要的2个参数String类型的mobileCode和userID
5)从代码行19中得知调用该方法返回一个名为getMobileCodeInfoResult的结果字符串
具体调用过程的准备工作大致如上所述。具体过程见Android Web Service学习总结(二)