12.21-Android WebService(基于KSOAP2)
KSOAP2_连接WebService
*****我是小知识点********
Ksoap2提供了对soap序列化更好的支持。Ksoap2是一个轻量级的J2ME平台的实现框架,提供了soap协议消息的
组装,网络post,网络return,解析等功能。
****美美分割线**********
1、在项目工程中导入KSOAP2.jar包
2、访问.net的URL,找到约定的URL命名空间和访问方法
String SERVICE_NS = "http://tempuri.org/";
String methodName = "mydata";
3、创建SoapObject,传入所要调用的Web Service的命名空间,Web Service方法名
SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
4、传参数给Web Service 服务器,调用SoapObject对象的addProperty(String name,Object value)方法去设置参数。(name为android与.net约定的参数名)
soapObject.addProperty("L",con);
5、使用SOA1.1协议创建Envelop对象,设置与.net提供的WebService保持较好的兼容性
// 生成调用WebService方法调用的soap信息,并且指定Soap版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
envelope.bodyOut=soapObject;
envelope.dotNet = true;// 是否调用DotNet开发的WebService
6、创建HttpTransportSE传输对象,传入WebService服务器地址
String SERVICE_URL = "http://192.168.66.66:82/data.asmx";
HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);
7、通过调用HttpTransportSE对象的call方法,其中call的第一个参数是命名空间+Web service方法名,第二个参数是SoapSerializationEnvelope的对象。
ht.call(SERVICE_NS+methodName, envelope);
8、假如返回值为字符串,接收返回参数的方法是:SoapSerializationEnvelope的对象envelope,envelioe.getResponse,接收返回的值。
if(envelope.getResponse()!=null){
String s = envelope.getResponse().toString();
}
************需注意的几点***********
1、命名空间一定要跟URL格式一致
2、方法名要与.net一致
3、注意SOAP的版本是10/11/12,你可以看.net中的xml文件开头版本,或者将三者均试一遍。
4、在调用的时候不能放在主线程中,要放在异步线程调用
***********华丽的分割线*************
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; } }
******************我是天天酷涛*******************