前言:在最近參與的項目中,需要實現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/3203892Webservice 介紹:
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/