调用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