Android采用KSOAP2访问webservice
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");
更多相关文章
- Android Studio之工程中导入jni库方法
- Android取消EditText自动聚焦、自动弹出输入法的方法
- 转-Android Studio *.jar 与 *.aar 的生成与*.aar导入项目方法
- Android 使用Parcelable序列化对象
- Android IPC机制(二):AIDL的基本使用方法
- 在PC端进行android截屏的多种方法
- Android在线更新SDK的方法(使用国内镜像)
- 详解Android应用开发中Intent的作用及使用方法