KSOAP2_鏈接WebServicejava
*****我是小知識點********android
Ksoap2提供了對soap序列化更好的支持。Ksoap2是一個輕量級的J2ME平臺的實現框架,提供了soap協議消息的服務器
組裝,網絡post,網絡return,解析等功能。網絡
****美美分割線**********框架
一、在項目工程中導入KSOAP2.jar包異步
二、訪問.net的URL,找到約定的URL命名空間和訪問方法post
String SERVICE_NS = "http://tempuri.org/";
String methodName = "mydata";spa
三、建立SoapObject,傳入所要調用的Web Service的命名空間,Web Service方法名.net
SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);線程
四、傳參數給Web Service 服務器,調用SoapObject對象的addProperty(String name,Object value)方法去設置參數。(name爲android與.net約定的參數名)
soapObject.addProperty("L",con);
五、使用SOA1.1協議建立Envelop對象,設置與.net提供的WebService保持較好的兼容性
// 生成調用WebService方法調用的soap信息,而且指定Soap版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
envelope.bodyOut=soapObject;
envelope.dotNet = true;// 是否調用DotNet開發的WebService
六、建立HttpTransportSE傳輸對象,傳入WebService服務器地址
String SERVICE_URL = "http://192.168.66.66:82/data.asmx";
HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);
七、經過調用HttpTransportSE對象的call方法,其中call的第一個參數是命名空間+Web service方法名,第二個參數是SoapSerializationEnvelope的對象。
ht.call(SERVICE_NS+methodName, envelope);
八、假如返回值爲字符串,接收返回參數的方法是:SoapSerializationEnvelope的對象envelope,envelioe.getResponse,接收返回的值。
if(envelope.getResponse()!=null){
String s = envelope.getResponse().toString();
}
************需注意的幾點***********
一、命名空間必定要跟URL格式一致
二、方法名要與.net一致
三、注意SOAP的版本是10/11/12,你能夠看.net中的xml文件開頭版本,或者將三者均試一遍。
四、在調用的時候不能放在主線程中,要放在異步線程調用
***********華麗的分割線*************
package test.example.Ksoap2; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; public class ConnectWebService { /** * 判斷回來的值是否正確 * * @param con * @return */ public static boolean getData(String con) { String SERVICE_URL = "http://192.168.66.66:82/data.asmx"; String SERVICE_NS = "http://tempuri.org/"; String methodName = "mydata"; // 建立SoapObject對象, // 建立該對象時須要傳入所要調用Wb Service的命名空間、Web Service方法名; SoapObject soapObject = new SoapObject(SERVICE_NS, methodName); // 若是有參數要傳給Web Service服務器, // 調用SoapObject對象的addProperty(String name,Object value)方法來設置參數, // 該方法的name參數指定參數名; // value參數指定參數值 soapObject.addProperty("L", con); // 使用SOA1.1協議建立Envelop對象 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10); envelope.bodyOut = soapObject; // 是否調用DotNet開發的WebService ,設置與.net提供的Web Service 保持較好的兼容性 envelope.dotNet = true; try { // 經過HttpTransportSE傳輸對象,傳入WebService服務器地址 HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); // 調用HttpTransportSE對象的call()方法,其中call的第一個參數soapAction, // 第二個爲SoapSerializationEvelope對象 調用遠程Web Service; ht.call(SERVICE_NS + methodName, envelope); if (envelope.getResponse() != null) { // 獲取服務器響應返回的SOAP消息 /* * SoapObject result = (SoapObject) envelope.bodyIn; SoapObject * detail = (SoapObject) * result.getProperty(methodName+"Result"); */ /* * 獲取返回的數據 SoapObject object = (SoapObject) envelope.bodyIn; * 獲取返回的結果 String result = object.getProperty(0).toString(); */ // 解析服務器相應的SOAP消息-字符串 String s = envelope.getResponse().toString(); if (s.equals("ok")) { return true; } } } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { System.out.println("********************異常啦"); } return false; } }
******************我是每天酷濤*******************