調用webservice總結:
1.加入第三方的jar包 Ksoap2-android-XXX
2.訪問響應的webservice的網站,查看響應的信息,獲得nameSpace,methodName,url,soapAction
3.若是request信息還有帶有SoapHander的。那麼就要封裝:依據參數封裝:java
Element[] header = new Element[1]; header[0] = new Element().createElement(nameSpace, "SoapHeader"); Element userName = new Element().createElement(nameSpace, "UserID"); userName.addChild(Node.TEXT, UserID); header[0].addChild(Node.ELEMENT, userName); Element pass = new Element().createElement(nameSpace, "PassWord"); pass.addChild(Node.TEXT, PassWord); header[0].addChild(Node.ELEMENT, pass);
4.封裝request信息的SoapBodyandroid
// 指定WebService的命名空間和調用的方法名 SoapObject soapObject=new SoapObject(nameSpace, methodName); //處理soap12:Body數據部分,也就是請求數據的參數 soapObject.addProperty("loginName",username); soapObject.addProperty("password",password);
5.指定SoapSerializationEnvelope信息web
//SoapEnvelope.VER11 表示使用的soap協議的版本號 1.1 或者是1.2 SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.headerOut=header; envelope.bodyOut=soapObject; envelope.dotNet = true; envelope.setOutputSoapObject(soapObject);
6.指定HttpTransportSE服務器
HttpTransportSE ht = new HttpTransportSE(url);
7.訪問webservice服務器網站
ht.call(soapAction, envelope);
8.兩種方式獲取服務器返回的信息:ui
try{ result =(SoapObject) soapEnvelope.getResponse();}
catch(ClassCastException e){ result =(SoapObject)soapEnvelope.bodyIn;}
9.解析字符串str獲取客戶端想要的信息url
注意:1.在作android Webservice開發的時候通常狀況下你們接受webservice服務器返回值的時候都是使用SoapObject soapObject = (SoapObject) envelope.getResponse();這個來接受返回來的值,但這種方法每每會產生java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive這樣的錯誤。在服務器端返回值是String類型的數值的時候使用SoapObject soapObject = (SoapObject) envelope.getResponse();和 SoapObject result = (SoapObject)envelope.bodyIn;這兩種方法來接受值都會報出 java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive這樣的錯誤。 咱們能夠使用 Object object = (Object)envelope.getResponse();就能夠解決這種錯誤。spa
2.若是在導入ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar後雖然沒有報錯,可是運行時仍是提示某個class找不到,必須:code
項目的Properties-->Java Build Path-->Order and Export 對相應的jar包打上勾,而後將工程clean,而後編譯運行。blog