对于Android调用Web Service服务,首先要了解什么事Web Service?
根据W3C定义,Web Service(即WEB服务)是一种用于支持网络间不同机器互操作的软件系统。它是一种自包含,自描述和模块化的应用程序。它可以在网络中被描述,被调用和发布。可以将它看作是基于网络的,分布式的模块组件。简单来说呢,就是Web Service是一套针对网络的服务体系,通过这套体系可以使得不同机器在网络间相互操作,抽象的说这是一种服务,具体的说这是一套软件系统。
那么既然要支持不同机器在网络间的相互操作,自然需要支持一套网络协议,如:HTTP,SOAP,UDDI,WSDL等(都支持者几个协议)。这些协议对操作系统,编程语言等没有要求。
由于它是基于HTTP协议的,所以它可以穿过防火墙,不需要更改防火墙的设置。从而避免了特殊端口通信时无法穿越防火墙的缺点。
简而言之,Web Service可以让我们像调用本地方法一样调用远程服务器上的服务。并且我们不需要关系远程服务器上的服务是用什么语言编写的,是在什么平台下的。
由于支持众多协议,这里主要讲述SOAP协议。这是一种轻量级的,简单的,基于XML的协议。是一种简单的交换信息的协议。经常使用的版本有SOAP1.1和SOAP1.2。
其次离不开的是WSDL,这是一种描述性的XML文档。描述的Web Service相关的接口,参数等相关信息。简单说就是一种针对Web Service的帮助文档。
了解了Web Service和SOAP以及WSDL和它的关系,那么就回归主题,如何在Android开发中调用Web Service服务以便连接远程服务器呢?
Android要调用Web Service需要调用第三方库,Ksoap2。这是一个SOAP Web Service的客户端开发包。在Android工程中需要导入该开发包。因为SDK不包含该开发包。在Android中该包叫做ksoap-Android。下载地址http://code.google.com/p/ksoap2-android/。(最好翻墙下载)
下载包后就需要将该包放在Android工程的libs文件夹下。然后导入包基本完成。
使用Web Service时主要分为以下几步:
①、定义命名空间。 String namespace=" ";
②、定义调用方法名称。String methodname=" ";
③、定义EndPoint部分。该部分通常是将WSDL地址末尾?wsdl去掉后剩余的部分。
④、定义SOAP action部分。该部分通常是命名空间+调用的方法名称 的组合。
初步准备是这些,然后就是通过soap对象来使用。
1、创建SoapObject对象。 SoapObject ws=new SoapObject(namespace,methodname);
2、给需要调用的web service接口传入参数。ws.addProperty("参数名",value);
3、生成SOAP的调用请求信息,并指定SOAP版本。 SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER10)//假设版本是1.0。
4、设置是否调用dotNet开发的Web Service。envelope.dotNet=true;//调用
5、发出Web Service链接请求。 envelope.setOutputSoapObject(ws); //自己理解的意思,但这句是必须的。
6、建立HttpTransportSE transport=new HttpTransportSE(endPoint);
7、调用Web Service服务。transport.call(soapAction,envelope);
8、获取返回的数据。 SoapObject data=(SoapObject)envelope.bodyIn;
9、获取返回的结果。SoapObject result=data.getProperty(0).toString();
10、将Web Service返回的结果显示在TextView中去。 resultText.getText(result);
以上是对Web Service的使用的简介。由于本人是刚开始接触,所以简单的介绍这些基本的,在之后的使用中如遇到需要注意的地方会继续补充。
这里最后要注意,要在AndroidManifest.xml文件中添加网络权限。 <user-permission androdi:name="android.permission.INTERNET"/>。