android-------使用Android应用调用Web Service

1、方法步骤

今天研究了下使用Android应用调用Web Service,使用的第三方jar是:ksoap2-android。使用ksoap2-android调用Web Service的操作步骤如下:

  1. 创建HttpTransportSE对象,该对象用于调用Web Service。
  2. 创建SoapSerializationEnvelope对象。
  3. 创建SoapObject对象,创建该对象时需要传入所要调用Web Service的命名空间、Web Service的方法名。
  4. 如果有参数需要传入Web Service的服务端,需要调用SoapObject对象的addProperty(String name,Object value)方法来设置参数,name指定参数名,value指定参数值。
  5. 调用SoapSerializationEnvelope的setOutputSoapObject()方法,或者直接对bodyOut属性赋值,将前两步创建的SoapObject对象设为SoapSerializationEnvelope的传出SOAP消息体。
  6. 调用对象的call()方法,并以SoapSerializationEnvelope作为参数调用远程的Web Service。
  7. 调用完成后,访问SoapSerializationEnvelope对象的bodyIn属性,该属性返回一个SoapObject对象,该对象代表Web Service返回的消息。解析该SoapObject对象就可获取调用Web Service的返回值。

2、例子(查询号码归属地)

主要的代码:
输入号码并单击

queryButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 手机号码(段)
                final String phoneSec = phoneSecEditText.getText().toString().trim();
                // 简单判断用户输入的手机号码(段)是否合法
                if ("".equals(phoneSec) || phoneSec.length() < 7) {
                    // 给出错误提示
                    phoneSecEditText.setError("您输入的手机号码(段)有误!");
                    phoneSecEditText.requestFocus();
                    // 将显示查询结果的TextView清空
                    resultView.setText("");
                    return;
                }
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        // 查询手机号码(段)信息
                        getRemoteInfo(phoneSec);
                    }
                }).start();


            }
        });

获取号码归属地

/**
     * 手机号段归属地查询
     *
     * @param phoneSec
     *            手机号段
     */
    public void getRemoteInfo(String phoneSec) {
        // 命名空间
        String nameSpace = "http://WebXml.com.cn/";
        // 调用的方法名称
        String methodName = "getMobileCodeInfo";
        // EndPoint
        String endPoint = "http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx";
        // SOAP Action
        String soapAction = "http://WebXml.com.cn/getMobileCodeInfo";

        // 指定WebService的命名空间和调用的方法名
        SoapObject rpc = new SoapObject(nameSpace, methodName);

        // 设置需调用WebService接口需要传入的两个参数mobileCode、userId
        rpc.addProperty("mobileCode", phoneSec);
        rpc.addProperty("userId", "");

        // 生成调用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();
        }

        // 获取返回的数据
        SoapObject object = (SoapObject) envelope.bodyIn;
        // 获取返回的结果
        String result = object.getProperty(0).toString();
        Message message=handler.obtainMessage();
        message.what=0x123;
        message.obj=result;
        handler.sendMessage(message);


    }

消息处理

private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what==0x123){
                // 将WebService返回的结果显示在TextView中
                resultView.setText((CharSequence) msg.obj);
            }
        }
    };

注意:记得加上访问网络的权限


效果如下图:
效果图

例子代码下载:
代码下载地址

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值