在安卓开发中,经常使用ksoap2-android调用WebService获取服务器端数据。操作步骤如下:
1.创建HttpTransportSE对象,该对象用于调用Web Service操作。
2.创建SoapSerializationEnvelope对象,该对象代表一个SOAP消息封包。
3.创建SoapObject对象,创建该对象时需要传入所要调用的Web Service的命名空间、Web Service方法名。
4.如果有参数需要传给Web Service服务器端,调用SoapObject对象的addProperty(String name, Object value)方法来设置参数,该方法的name参数指定参数名,value参数指定参数值
5.调用SoapSerializationEnvelope的setOutputSoapObject()方法,或者直接对bodyOut属性赋值,将前两步所创建的SoapObject对象设为SoapSerializationEnvolope的传出SOAP消息体
6.调用对象的call()方法,并以SoapSerializationEnvelope作为参数调用远程Web Service。
7.调用完成后,访问SoapSerializationEnvelope对象的bodyIn属性,该属性返回一个SoapObject对象,该对象就代表了Web Service的返回信息。解析该SoapObject对象,即可获取调用的Web Service的返回值。
示例代码:
// 调用的方法 String methodName = "getUserInfo"; // 创建HttpTransportSE传输对象 final HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); // ht.debug = true; // 使用SOAP1.1协议创建Envelop对象 final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // // 实例化SoapObject对象 SoapObject soapObject = new SoapObject(SERVICE_NS, methodName); // soapObject.addProperty("arg0", "客户端参数:"); // // 将soapObject对象设置为 SoapSerializationEnvelope对象的传出SOAP消息 envelope.bodyOut = soapObject; // new Thread() { public void run() { try { // 调用Web Service ht.call(null, envelope); //⑥ if (envelope.getResponse() != null) { // 获取服务器响应返回的SOAP消息 SoapObject result = (SoapObject) envelope.bodyIn; //⑦ // 接下来就是从SoapObject对象中解析响应数据的过程了。 SoapObject detail1 = (SoapObject) result .getProperty(0); SoapObject detail2 = (SoapObject) result .getProperty(1); StringBuilder person1 = new StringBuilder(); person1.append("用户名:"); person1.append(detail1.getProperty(3)); person1.append("\n密码"); person1.append(detail1.getProperty(0)); person1.append("\n身高:"); person1.append(detail1.getProperty(1)); Message msg = new Message(); msg.what = 0x123; msg.obj = person1.toString(); handler.sendMessage(msg); } } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } } }.start();