前言:在最近参与的项目中,需要实现Android发送soap请求,获取Webservice数据,故做此文章做一个总结。
目前,Google更倾向于Restful风格的通信,它并没有对Soap请求封装,所以我们使用的是第三方jar包:ksoap2-android
1. 开发环境
- win7 64位
- Android studio2.1.1
- ksoap2-android 3.5.0
2. 关于 ksoap2-android
3. 关于WSDL
作为Webservice通信的重要一环,我们需要对wsdl文档有一些基本的了解,这样才能更好的调用Webservice服务。
-
Wsdl教程:
http://www.w3school.com.cn/wsdl/ -
Wsdl 文档详解:
http://blog.csdn.net/tropica/article/details/3203892 -
Webservice 介绍:
http://www.cnblogs.com/Jessy/p/3528341.html
4. 使用教程
- Eclipse 通过build path—> add jars 导入
-
Android Studio 将jar包复制到 libs 目录下,即可。查看项目的build.gradle 中是否添加了jar依赖。默认会自动扫描jar包并导入如下图:
Jar包配置.png
- Android Studio 还可以通过配置gradle 直接导入
http://stackoverflow.com/questions/18774355/adding-ksoap-dependency-to-gradle-project
- 代码示例
// 摄氏度 转 华氏温度
public void calculate() {
// 设置命名空间、访问地址、方法名
String SOAP_ACTION = "http://www.w3schools.com/xml/CelsiusToFahrenheit";
String METHOD_NAME = "CelsiusToFahrenheit";
String NAMESPACE = "http://www.w3schools.com/xml/";
String URL = "http://www.w3schools.com/xml/tempconvert.asmx";
try {
// 创建soapObject,即拼装soap bodyin
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
// 添加传入参数,根据具体格式测试
Request.addProperty("Celsius", getCel);
// 创建soap 数据
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(Request);
HttpTransportSE transport = new HttpTransportSE(URL);
// soap 协议发送
transport.call(SOAP_ACTION, soapEnvelope);
// soap 请求完成后返回数据并转换成字符串
resultString = (SoapPrimitive) soapEnvelope.getResponse();
Log.i(TAG, "Result Celsius: " + resultString);
} catch (Exception ex) {
Log.e(TAG, "Error: " + ex.getMessage());
}
5. 小结
项目源码:http://git.oschina.net/tobe/MJAndroidDemo/tree/master/SoapAndroidDemo
参考博客:https://trinitytuts.com/load-data-from-soap-web-service-in-android-application/
网友评论