"本文将详细介绍如何在Android应用中使用ksoap2库来调用WebService并传递参数。在Android开发中,调用远程服务是常见的需求,而ksoap2是Android平台下广泛使用的调用WebService的库。" 在Android开发中,如果需要与服务器进行数据交互,特别是与基于SOAP协议的WebService通信时,可以使用ksoap2这个开源库。ksoap2支持SOAP 1.1和SOAP 1.2协议,使得Android应用能够方便地调用WebService提供的功能。 首先,要了解WebService的基本概念。WebService是一种基于开放标准(如WSDL、SOAP)的、独立于平台的应用程序接口,可以通过HTTP协议进行调用。在本例中,我们关注如何通过ksoap2发送SOAP消息到WebService服务器,并接收响应。 调用WebService的基本步骤如下: 1. 构建SOAP请求:创建一个SoapObject,它代表要调用的WebService方法及其参数。例如: ```java SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME); rpc.addProperty("abc", "test"); ``` 这里`NAMESPACE`是WebService的命名空间,`METHOD_NAME`是方法名,`addProperty`用于添加参数。 2. 设置SOAP Envelope:创建一个SoapSerializationEnvelope对象,用来封装SOAP消息。设置其版本号,并将前面创建的SoapObject设置为消息体: ```java SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = rpc; envelope.dotNet = false; // 如果是.NET环境的服务,设为true ``` 3. 配置传输层:选择合适的HttpTransport对象,如AndroidHttpTransport,用于实际的HTTP通信: ```java private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx"; HttpTransportSE ht = new HttpTransportSE(URL); ht.debug = true; // 开启调试模式,方便查看HTTP请求和响应 ``` 4. 调用WebService:设置SOAP Action并执行HTTP请求: ```java private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName"; ht.call(SOAP_ACTION, envelope); ``` 5. 解析响应:调用`getResponse()`获取服务器返回的SOAP响应,并根据需要从SoapObject中提取数据。例如: ```java SoapObject result = (SoapObject) envelope.bodyIn; String responseValue = result.getPropertyAsString("property_name"); ``` 6. 处理权限问题:由于Android应用需要网络访问权限,所以要在`AndroidManifest.xml`中添加相应权限声明: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` 在实际开发中,可能还需要处理各种异常,例如网络连接错误、解析错误等。同时,对于返回的数据,可能需要进一步的解析和处理,以便在Android应用中展示或使用。ksoap2提供了一套完整的框架,让开发者能够方便地与WebService进行交互,从而实现跨平台的数据交换。
1、指定 WebService 的命名空间和调用方法;
2、设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:
rpc.addProperty("abc", "test");
要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
3、生成调用Webservice方法的SOAP请求信息。
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = rpc;
envelope.dotNet = false; //这里如果设置为TRUE,那么在服务器端将获取不到参数值(如:将这些数据插入到数据库中的话)
envelope.setOutputSoapObject(rpc);
创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。
该版本号需要根据服务端WebService的版本号设置。
在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性, 该属性的值就是在第一步创建的SoapObject对象。
4、创建HttpTransportsSE对象。
这里不要使用 AndroidHttpTransport ht = new AndroidHttpTransport(URL); 这是一个要过期的类
private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx";
HttpTransportSE ht = new HttpTransportSE(URL);
ht.debug = true;
5、使用call方法调用WebService方法
private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName";
ht.call(SOAP_ACTION, envelope);
6、获得WebService方法的返回结果
有两种方法:
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 19
- 资源: 43
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 社交媒体营销激励优化策略研究
- 终端信息查看工具:qt框架下的输出强制抓取
- MinGW Win32 C/C++ 开发环境压缩包快速入门指南
- STC8G1K08 PWM模块实现10K频率及易改占空比波形输出
- MSP432电机驱动编码器测路程方法解析
- 实现动静分离案例的css/js/img文件指南
- 爱心代码五种:高效编程的精选技巧
- MATLAB实现广义互相关时延估计GCC的多种加权方法
- Hive CDH Jar包下载:免费获取Hive JDBC驱动
- STC8G单片机实现EEPROM及MODBUS-RTU协议
- Java集合框架面试题精讲
- Unity游戏设计与开发资源全集
- 探索音乐盒.zip背后的神秘世界
- Matlab自相干算法GUI界面设计及仿真
- STM32智能小车PID算法实现资料
- Python爬虫实战:高效爬取百度贴吧信息