Java本身提供丰富的Web Service支持,比如说sun公司制定的JAX-WS 2 规范,还有Apache开源组织所提供的Axis1,Axis2,CXF等,这些技术不仅可以用于方便的对外提供Web Service,也可以用于简化Web Service的客户端编程。WebService是一种基于SOAP协议的远程调用标准,对于这个协议理解不深,知道webservice可以将不同操作系统平台、不同语言、不同技术整合到一块,android SDK没有直接调用webservice的库,最常用的是借助ksoap2-android这个第三方SDK。
对于手机等小型设备,他们的计算资源,存储资源都十分有限,因此android应用不大可能需要对外提供Web Service,Android应用通常只是充当Web Service的客户端,调用远程Web Service。
Google为Android平台开发Web Service客户端提供了ksoap2-android项目。下载ksoap2-android,点击这里下载jar包http://code.google.com/p/ksoap2-android/。
将下载好的JAR包添加到项目中的lib目录下,就可以借助ksoap2-android项目来调用Web Service所暴露的操作。
使用ksoap2-android调用Web Service操作的步骤如下:
1.创建HttpTransportSE传输对象:HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); SERVICE_URL是webservice提供服务的url
2.使用SOAP1.1协议创建Envelop对象:SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 设置SOAP协议的版本号,根据服务端WebService的版本号设置。
3.实例化SoapObject对象:SoapObject soapObject = new SoapObject(SERVICE_NAMESPACE, methodName); 第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。
4.设置调用方法的参数值,如果没有参数,可以省略:例如soapObject.addProperty("theCityCode", cityName);
5.记得设置bodyout属性 envelope.bodyOut = soapObject;
6.调用webservice:ht.call(SERVICE_NAMESPACE+methodName, envelope);
7.获取服务器响应返回的SOAP消息:
SoapObject result = (SoapObject) envelope.bodyIn;
SoapObject detail = (SoapObject) result.getProperty(methodName+"Result");
在开发天气预报的应用之前,首先需要找到一个可以对外提供天气预报的Web Service,暂且使用网络免费的WebService这个可以http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx
访问http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl,可以看到WSDL文档。
通过WSDL文档可以查看到调用Web Service的必要信息。
本程序主要需要调用如下三个Web Service操作:
1.获取省份
2.根据省份获取城市
3.根据城市获取天气
/**
*
*/
package org.crazyit.net;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Ca