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;
    }
}

******************我是天天酷涛*******************

 

posted @ 2015-12-21 11:11  天天酷涛  阅读(968)  评论(0编辑  收藏  举报