Android 请求webservice

webservice请求

先推荐一个检测工具,火狐浏览器自带的插件:HttpRequester。他可以检测webservice请求是否正确。
接口:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx

如图:
这里写图片描述

那么我们在代码中如何请求呢?


首先我们来看一下这个请求:
这里写图片描述

这里需要一个soap.jar,可以在网上下载


下面来看一下代码:

 private SoapObject CallWebServices(String byProvinceName ) {
        SoapObject result =null;
        // 指定WebService的命名空间和调用的方法名
        SoapObject rpc = new SoapObject(NAMESPACE, METHODNAME);

        //添加参数
        PropertyInfo p =new PropertyInfo();
        p.setName("byProvinceName");
        p.setValue(byProvinceName);
        rpc.addProperty(p);

        // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

        envelope.bodyOut = rpc;
        // 设置是否调用的是dotNet开发的WebService
        envelope.dotNet = true;
        // 等价于envelope.bodyOut = rpc;
        envelope.setOutputSoapObject(rpc);

        HttpTransportSE transport = new HttpTransportSE(ENDPOINT);
        try {
            // 调用WebService
            transport.call(SOAPACTION, envelope);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 获取返回的数据
        try {
            result = (SoapObject) envelope.getResponse();

        } catch (SoapFault soapFault) {
            soapFault.printStackTrace();
        }

        Log.i("yqy","请求结果=="+result);
        return result;
    }

具体的域名什么的可以查看其对于的WSDL


上面的请求中没有soapHeader,如果加上soapHeader又该怎么请求呢?
这里写图片描述
只要在代码中添加上下面这段:(这个的命名空间是“http://tempuri.org”)

    //添加headers

        Element[] headers =new Element[1];
        headers[0] =new Element().createElement(NAMESPACE,"MySoapHeader");//这里要和接口里的对应上
        Element userName =new Element().createElement(NAMESPACE,"UserName");
        userName.addChild(Node.TEXT,"UserName对应的字符串");
        headers[0].addChild(Node.ELEMENT,userName);
        Element password =new Element().createElement(NAMESPACE,"PassWord");
        password.addChild(Node.TEXT,"PassWord对应的字符串");
        headers[0].addChild(Node.ELEMENT,password);

然后添加到envelope

envelope.headerOut = headers;

好多还不是很清楚,先做个记录。
以上

参考:
http://blog.csdn.net/lyq8479/article/details/6420398

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值