WebService for Android

首先下载KSOAP包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包
  把下载的KSOAP包放在android项目的lib目录下

这个也就不多做介绍了,网上一大堆,具体实现步骤如下:

第一步:先实例化SoapObject对象
  1、命名空间:serviceNameSpace
  2、调用方法:methodName
       SoapObject request=new SoapObject(serviceNameSpace, methodName); 

第二步:如果有参数的话,设置调用方法的参数
       request.addProperty("参数名称","参数值");

第三步:设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致):
  SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

第四步:注册Envelope,
  (new MarshalBase64()).register(envelope);

第五步:构建传输对象,并指明WSDL文档URL:
  String serviceURL = "http://webservice.WebXml.com.cn/WebServices/WeatherWS.asmx";
  AndroidHttpTransport ht = new AndroidHttpTransport(serviceURL);
  ht.debug = true;
  
第六步:调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象):
  ht.call(serviceNameSpace+methodName, envelope);

看起来还是很抽象的,实例介绍下:

这是我写的一个WebServiceUtil类,具体实现调用webService的步骤

WebServiceUtil
 1 public class WebServiceUtil {
2 private SoapObject detail;
3
4 /**
5 *
6 * @param namespace 命名空间
7 * @param methodname 调用方法
8 * @param URL 请求URL
9 * @param map 用来存放调用方法的参数
10 * @return 返回SoapObject
11 */
12 public static SoapObject getResult(String namespace, String methodname,
13 String URL, Map map) {
14 //实例化SoapObject对象
15 SoapObject so = new SoapObject(namespace, methodname);
16 //如果有参数,设置调用方法参数
17 Set keySet = map.keySet();// 返回键的集合
18 Iterator it = keySet.iterator();
19 while (it.hasNext()) // 第一种迭代方式取键值
20 {
21 Object key = it.next();
22 so.addProperty(key.toString(),map.get(key));
23 }
24
25 //获得序列化的Envelope
26 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
27 SoapEnvelope.VER11);
28 envelope.bodyOut = so;
29 envelope.dotNet = true;
30 envelope.setOutputSoapObject(so);
31
32 //Android传输对象
33 HttpTransportSE ht = new HttpTransportSE(URL);
34 ht.debug = true;
35
36 try {
37 //调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象)
38 ht.call(namespace + methodname, envelope);
39 //返回SoapObject
40 return (SoapObject) envelope.getResponse();
41 } catch (IOException e) {
42 // TODO Auto-generated catch block
43 e.printStackTrace();
44 } catch (XmlPullParserException e) {
45 // TODO Auto-generated catch block
46 e.printStackTrace();
47 }
48 return null;
49 }
50 }


然后基于这个类,我们可以很方便的调用Webservice

下面是一个调用天气预报的例子,呵呵,基本上关于这方便的案例都是天气预报,我也俗一回吧

WebServiceHelper
 1 public class WebServiceHelper {
2 //命名空间
3 private static final String namespace = "http://WebXml.com.cn/";
4 //访问URL
5 private static final String URL = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx";
6
7 public static SoapObject getWeatherByCity(String city){
8 //调用方法
9 String methodname = "getWeather";
10 //定义一个map,用来存放方法参数,键代表方法名,值代表方法值
11 Map map = new HashMap();
12 map.put("theCityCode", city);
13 //调用getResult获得SoapObject
14 SoapObject result = WebServiceUtil.getResult(namespace, methodname, URL, map);
15 //输出结果
16 System.out.println(result);
17 return result;
18 }
19
20 }


然后我们运行程序,就会看到我们查找到的内容了,写的比较简单,你们可以根据需要来进行进一步的解析

你可能感兴趣的:(WebService for Android)