1首先下载KSOAP包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包然后新建android项目:并把下载的KSOAP包放在android项目的lib目录下:右键->build path->configure build path--选择Libraries,如图:
2第一:实例化SoapObject 对象,指定webService的命名空间(从相关WSDL文档中可以查看命名空间),以及调用方法名称。如://命名空间private static final String serviceNameSpace='http://WebXml.com.cn/';//调用方法(获得支持的城市)private static final String getSupportCity='getSupportCity';//实例化SoapObject对象SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);
3第二步:假设方法有参数的话,设置调用方法参数:request.addProperty('参数名称','参数值');
4第三步:设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致)://获得序列化的EnvelopeSoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut=request;
5第四步:注册Envelope:(new MarshalBase64()).register(envelope);
6第五步:构建传输对象,并指明WSDL文档URL://请求URLprivate static final String serviceURL='http://www.webxml.com.cn/webservices/weatherwebservice.asmx';//Android传输对象AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL);transport.debug=true;
7第六步:调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象):transport.call(serviceNameSpace+getWeatherbyCityName, envelope);
8第七步:解析返回数据:if(envelope.getResponse()!=null){ return parse(envelope.bodyIn.toString()); }/************** * 解析XML * @param str * @return */ private static List parse(String str){ String temp; List list=new ArrayList(); if(str!=null && str.length()>0){ int start=str.indexOf('string'); int end=str.lastIndexOf(';'); temp=str.substring(start, end-3); String []test=temp.split(';'); for(int i=0;i
9然后你可以在浏览器中输入地址(WSDL):serviceURL,你会看到一些可供调用的方法:
10我们选择获取国内外主要城市或者省份的方法吧:getSupportProvice,然后调用,你会发现浏览器返回给我们的是xml文档: - 直辖市 特别行政区 黑龙江 吉林 辽宁 内蒙古 河北 河南 山东 山西 江苏 安徽 陕西 宁夏 甘肃 青海 湖北 湖南 浙江 江西 福建 贵州 四川 广东 广西 云南 海南 新疆 西藏 台湾 亚洲 欧洲 非洲 北美洲 南美洲 大洋洲 我们可以用 listview来显示:
11那么下面我将给出全部代码:public class WebServiceHelper { //WSDL文档中的命名空间 private static final String targetNameSpace='http://WebXml.com.cn/'; //WSDL文档中的URL private static final String WSDL='http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl'; //需要调用的方法名(获得本天气预报Web Services支持的洲、国内外省份和城市信息) private static final String getSupportProvince='getSupportProvince'; //需要调用的方法名(获得本天气预报Web Services支持的城市信息,根据省份查询城市集合:带参数) private static final String getSupportCity='getSupportCity'; //根据城市或地区名称查询获得未来三天内天气情况、现在的天气实况、天气和生活指数 private static final String getWeatherbyCityName='getWeatherbyCityName'; /******** * 获得州,国内外省份和城市信息 * @return */ public List getProvince(){ List provinces=new ArrayList(); String str=''; SoapObject soapObject=new SoapObject(targetNameSpace,getSupportProvince); //request.addProperty('参数', '参数值');调用的方法参数与参数值(根据具体需要可选可不选) SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(soapObject);//envelope.bodyOut=request; AndroidHttpTransport httpTranstation=new AndroidHttpTransport(WSDL); //或者HttpTransportSE httpTranstation=new HttpTransportSE(WSDL); try { httpTranstation.call(targetNameSpace+getSupportProvince, envelope); SoapObject result=(SoapObject)envelope.getResponse(); //下面对结果进行解析,结构类似json对象 //str=(String) result.getProperty(6).toString(); int count=result.getPropertyCount(); for(int index=0;index getCitys(String province){ List citys=new ArrayList(); SoapObject soapObject=new SoapObject(targetNameSpace,getSupportCity); soapObject.addProperty('byProvinceName', province); SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(soapObject); AndroidHttpTransport httpTransport=new AndroidHttpTransport(WSDL); try { httpTransport.call(targetNameSpace+getSupportCity, envelope); SoapObject result=(SoapObject)envelope.getResponse(); int count=result.getPropertyCount(); for(int index=0;index> list=new ArrayList