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;
}
}
******************我是天天酷涛*******************