android调用WebService学习

————————————————————————————————————-

以下是几个主要的方法:

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");

————————————————————————————————————-

在这个天气预报的demo中需要多次调用webservice,将方法写在一个工具类中,代码如下:

package com.example.webservicedemo;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.ksoap2.SoapEnvelope;import org.ksoap2.SoapFault;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import org.xmlpull.v1.XmlPullParserException;public class WebServiceUtil {// 定义webservice的命名空间public static final String SERVICE_NAMESPACE = "";// 定义webservice提供服务的urlpublic static final String SERVICE_URL = "";// 调用远程webservice获取省份列表public static List<String> getProvinceList() {// 调用 的方法String methodName = "getRegionProvince";// 创建HttpTransportSE传输对象HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);try {ht.debug = true;// 使用SOAP1.1协议创建Envelop对象SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// 实例化SoapObject对象SoapObject soapObject = new SoapObject(SERVICE_NAMESPACE,methodName);envelope.bodyOut = soapObject;// 设置与.NET提供的webservice保持较好的兼容性envelope.dotNet = true;// 调用webserviceht.call(SERVICE_NAMESPACE + methodName, envelope);if (envelope.getResponse() != null) {// 获取服务器响应返回的SOAP消息SoapObject result = (SoapObject) envelope.bodyIn;SoapObject detail = (SoapObject) result.getProperty(methodName+ "Result");// 解析服务器响应的SOAP消息return parseProvinceOrCity(detail);}} catch (SoapFault e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (XmlPullParserException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}// 根据省份获取城市列表public static List<String> getCityListsByProvince(String province) {// 调用的方法String methodName = "getSupportCityString";// 创建httptransportSE传输对象HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);ht.debug = true;// 实例化SoapObject对象SoapObject soapObject = new SoapObject(SERVICE_NAMESPACE, methodName);// 添加一个请求参数soapObject.addProperty("theRegionCode", province);// 使用soap1.1协议创建envelop对象SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut = soapObject;// 设置与.NET提供的webservice保持较好的兼容性envelope.dotNet = true;// 调用webservicetry {ht.call(SERVICE_NAMESPACE + methodName, envelope);if (envelope.getResponse() != null) {// 获取服务器响应返回的SOAP消息SoapObject result = (SoapObject) envelope.bodyIn;SoapObject detail = (SoapObject) result.getProperty(methodName+ "Result");// 解析服务器响应的SOAP消息return parseProvinceOrCity(detail);}} catch (SoapFault e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (XmlPullParserException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}// 解析省份或城市public static List<String> parseProvinceOrCity(SoapObject detail) {ArrayList<String> result = new ArrayList<String>();for (int i = 0; i < detail.getPropertyCount(); i++) {// 解析出每个省份result.add(detail.getProperty(i).toString().split(",")[0]);}return result;}// 根据城市字符串获取相应天气情况public static SoapObject getWeatherByCity(String cityName) {String methodName = "getWeather";HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);ht.debug = true;SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);SoapObject soapObject = new SoapObject(SERVICE_NAMESPACE, methodName);soapObject.addProperty("theCityCode", cityName);envelope.bodyOut = soapObject;envelope.dotNet = true;try {ht.call(SERVICE_NAMESPACE + methodName, envelope);SoapObject result = (SoapObject) envelope.bodyIn;SoapObject detail = (SoapObject) result.getProperty(methodName+ "Result");return detail;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (XmlPullParserException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}

为什么?答:点线杆上贴着”“此处不许小便!”

android调用WebService学习

相关文章:

你感兴趣的文章:

标签云: