Android webService的使用方法:

webService的使用方法:

注意:上述代码的服务地址可能已经发生改变,而且代码中的参数不是天气查询对应的参数,请大家自己寻找服务地址和对应的参数

首先导入webService需要用到的包:Ksoap2

详情可见同目录的文件:关于使用WebService的Ksoap2包的导入文件内容,获取导入方法

  1. 然后通过WSDL_URL获取服务的网址,命名控件和方法名称,完成变量的初始化

private static String WSDL_URL = "http://ws.webxml.com.cn/WebServices/WeatherWS.asmx";

    private static String nameSpace = "http://WebXml.com.cn/";

private static String methodName = "getRegionProvince";

2. 接着创建SoapObject的对象,并传入命名控件变量和方法名对SoapObject对象进行初始化,如果需要传入参数,则进行参数的赋值

 

SoapObject request = new SoapObject(nameSpace, methodName);

//这里的参数是我当时测试手机号码归属地的参数,和上面天气查询的服务地址不匹配,请大家自行寻找想要的服务地址和参数列表

request.addProperty("mobileCode", "");

request.addProperty("userId", "");

3. 接着创建SoapSerializationEnvelope, 同时指定soap版本号(之前在wsdl中看到的)

并对SoapSerializationEnvelope对象进行参数设置

SoapSerializationEnvelope envelope

= new SoapSerializationEnvelope(SoapSerializationEnvelope.VER12);

envelope.bodyOut = request;//由于是发送请求,所以是设置bodyOut

envelope.dotNet = true;//由于是.net开发的webservice,所以这里要设置为true

4. 创建SoapTransportSE 对象,传入服务地址实例化参数,用该对象呼叫服务

HttpTransportSE httpTransportSE = new HttpTransportSE(WSDL_URL);

httpTransportSE.call(null, envelope);//调用

5. 创建SoapObject对象来接受服务器返回的值

SoapObject object = (SoapObject) envelope.bodyIn;

String result = object.getProperty(0).toString();

//result即为服务器返回的值,可立即进行处理

最后附上完整代码

代码如下

 

import android.util.Log;

import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapSerializationEnvelope;

import org.ksoap2.transport.HttpTransportSE;

import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;

/**

 * 注:调用WebService为网络耗时操作,须在别的线程中进行调用

 * 1. 首先创建SoapObject对象,传入nameSpace和methodName来实例化这个对象

 *      SoapObject request = new SoapObject(nameSpace, methodName);

 * 2. 如果请求需要传递参数,则在SoapObject对象被创建后进行配置

 *        //这个是个例子,具体参数个数和名称须在服务地址中进行查看

 *        a. request.addProperty("mobileCode", "");

 *        b. request.addProperty("userId", "");

 * 3. 创建SoapSerializationEnvelope对象,传入soap版本号进行实例化

 *        a. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER12);

 * 4. 对SoapSerializationEnvelope对象进行参数设置:

 *        a. envelope.bodyOut = request; //由于是发送请求,故设置为bodyOut

 *        b.  envelope.dotNet = true; //如果webService是.net开发的,就设置为true,否则为false

 * 5. 创建HttpTransportSE对象,传入服务地址进行实例化

 *        a. HttpTransportSE httpTransportSE = new HttpTransportSE(WSDL_URL);

 * 6. 呼叫服务(此语句可能会抛出异常,需进行异常处理)

 *        a. httpTransportSE.call(null, envelope);//调用服务

 * 7. 呼叫服务成功,获取服务器返回的结果

 *        a. SoapObject object = (SoapObject) envelope.bodyIn;

 *        b. String result = object.getProperty(0).toString();

 *        //result即为webService服务器返回的结果,现在可立刻进行处理

 */

public class WebServiceUtil {

    private static String WSDL_URL = "http://ws.webxml.com.cn/WebServices/WeatherWS.asmx";

    private static String nameSpace = "http://WebXml.com.cn/";

    private static String methodName = "getRegionProvince";

    public static void getConnection(){

        SoapObject request = new SoapObject(nameSpace, methodName);

        // 设置需调用WebService接口需要传入的两个参数mobileCode、userId

        request.addProperty("mobileCode", "");

        request.addProperty("userId", "");

        //创建SoapSerializationEnvelope 对象,同时指定soap版本号(之前在wsdl中看到的)

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER12);

        envelope.bodyOut = request;//由于是发送请求,所以是设置bodyOut

        envelope.dotNet = true;//由于是.net开发的webservice,所以这里要设置为true

        HttpTransportSE httpTransportSE = new HttpTransportSE(WSDL_URL);

        try {

            httpTransportSE.call(null, envelope);//调用

        } catch (IOException e) {

            e.printStackTrace();

        } catch (XmlPullParserException e) {

            e.printStackTrace();

        }

        // 获取返回的数据

        SoapObject object = (SoapObject) envelope.bodyIn;

        // 获取返回的结果

        String result = object.getProperty(0).toString();

        Log.d("debug",result+" emmmmmmmmm");

 

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值