Android采用KSOAP2访问webservice

一、获取并使用KSOAP包

在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WebService库非常丰富,但这些对Android来说过于庞大。适合手机的WebService客户端的SDK有一些,比较常用的是KSOAP2。

可以从http://code.google.com/p/ksoap2-android/downloads/list进行下载;将下载的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包复制到Eclipse工程的lib目录中,当然也可以放在其他的目录里。同时在Eclipse工程中引用这个jar包。


二、分以下几步来调用 WebService


1、指定 WebService 的命名空间和调用方法

importorg.ksoap2.serialization.SoapObject;privatestaticfinalStringNAMESPACE="http://WebXml.com.cn/";privatestaticfinalStringMETHOD_NAME="getWeatherbyCityName";SoapObjectrpc=newSoapObject(NAMESPACE,METHOD_NAME);

SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。
第二个参数表示要调用的WebService方法名。

2、设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:

rpc.addProperty("theCityName","北京");

要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。

3、生成调用Webservice方法的SOAP请求信息。

SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut=rpc;envelope.dotNet=true;envelope.setOutputSoapObject(rpc);

创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。
该版本号需要根据服务端WebService的版本号设置。
在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,
该属性的值就是在第一步创建的SoapObject对象。

4、创建HttpTransportsSE对象。

这里不要使用 AndroidHttpTransport ht = new AndroidHttpTransport(URL); 这是一个要过期的类

privatestaticStringURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";HttpTransportSEht=newHttpTransportSE(URL);
ht.debug=true;

5、使用call方法调用WebService方法

privatestaticStringSOAP_ACTION="http://WebXml.com.cn/getWeatherbyCityName";ht.call(SOAP_ACTION,envelope);

网上有人说这里的call的第一个参数为null,但是经过我的测试,null是不行的。
第2个参数就是在第3步创建的SoapSerializationEnvelope对象。

6、获得WebService方法的返回结果

有两种方法:

1、使用getResponse方法获得返回数据。

privateSoapObjectdetail;detail=(SoapObject)envelope.getResponse();

2、使用 bodyIn 及 getProperty。

privateSoapObjectdetail;SoapObjectresult=(SoapObject)envelope.bodyIn;detail=(SoapObject)result.getProperty("getWeatherbyCityNameResult");


更多相关文章

  1. Android Studio之工程中导入jni库方法
  2. Android取消EditText自动聚焦、自动弹出输入法的方法
  3. 转-Android Studio *.jar 与 *.aar 的生成与*.aar导入项目方法
  4. Android 使用Parcelable序列化对象
  5. Android IPC机制(二):AIDL的基本使用方法
  6. 在PC端进行android截屏的多种方法
  7. Android在线更新SDK的方法(使用国内镜像)
  8. 详解Android应用开发中Intent的作用及使用方法

随机推荐

  1. Android(安卓)学习笔记--android基本
  2. 关于android不能使用HttpClient以及相关
  3. Activity 的启动流程源码分析(Android 9.0
  4. Android字体简述
  5. Android设置软件开机自启动
  6. Android NFC简介
  7. android中将数据写入手机内存和sdcard中
  8. android与JS交互
  9. Ubuntu 下编译Android(安卓)源代码
  10. android SQLiteDatabase中版本控制作用详