Android平台调用WebService详解

Android平台调用WebService详解_第1张图片
webservice.jpg

我们并不讨论如何去搭建一个WebService,我们仅仅知道如何去获取WebService提供的服务, 然后解析返回的XML数据,然后把相关数据显示到我们的Android设备上就好!

首先如果想在Android平台上调用WebService需要依赖于第三方类库:ksoap2 而在Android平台上,使用的是ksoap2 Android,一个高效,轻量级的SOAP开发包!
这个链接永久有效,里面有两个版本的Jar包,我用的是老一点版本的,没有任何问题,完全可以用。新的版本大家可以去自己用一下,应该问题不大。
链接:https://pan.baidu.com/s/1kUPrui7 密码:lajx

这里我用的是Android Studio,直接上代码吧

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setXTContentView(R.layout.login_forreject);
        init();
    }
 //定义一个Handler用来更新页面:
    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0x001:
//                    txt_result.setText("结果显示:\n" + result);
                    Toast.makeText(LoginForRejectActivity.this, "获取天气信息成功", Toast.LENGTH_SHORT).show();
                    break;
                case 0x002:
//                    txt_result.setText("结果显示:\n" + result);
                    Toast.makeText(LoginForRejectActivity.this, "号码归属地查询成功", Toast.LENGTH_SHORT).show();
                    break;
                default:
                    break;
            }

        }
    };
    private void init() {     
     // 开启一个子线程,进行网络操作,等待有返回结果,使用handler通知UI
        new Thread(networkTask).start();
}

   /**
     * 网络操作相关的子线程
     */
    Runnable networkTask = new Runnable() {

        @Override
        public void run() {
            // TODO
            // 在这里进行 http request.网络请求相关操作
            getRejectInfo();
        }
    };
    private void getRejectInfo() {
        // 命名空间
        String nameSpace = "http://tempuri.org/";
        // 调用的方法名称
        String methodName = "Test";
        // EndPoint
        String endPoint = "http://192.168.1.164:8080/RejectWebService.asmx";
        // SOAP Action
        String soapAction = "http://tempuri.org/Test";

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

        // 设置需调用WebService接口需要传入的三个参数devicedCode、carCode、typed
        rpc.addProperty("devicedCode", "dff233423238709092");//设备编码
        rpc.addProperty("carCode", "2312kjj234kjdf");//条码
        rpc.addProperty("typed", 0);// 箱码是1,瓶码是0

        // 生成调用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);//ver11,第一个参数不能为空
//            transport.call(null, envelope);//envolopeVersion为ver12第一个参数可以为空,必须接口支持ver12才行
            // 获取返回的数据
            SoapObject response = (SoapObject) envelope.bodyIn;
            Log.e(TAG, "getRejectInfo: object========"+ response);
            //response的处理需要根据返回的具体情况,基本都要进行下面一步
            SoapObject o = (SoapObject) response.getProperty(0);
            Log.e(TAG, "getRejectInfo: o==========" + o);
            handler.sendEmptyMessage(0x001);
            // 获取返回的结果
//        String result = object.getProperty(0).toString();
//        Log.e(TAG, "getRejectInfo: result=============="+ result );
            // 将WebService返回的结果显示在TextView中
//        resultView.setText(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

"http://192.168.1.164:8080/RejectWebService.asmx" 后台会给你,你可以在后面加“ ?wsdl ”,我的是这样的:
http://192.168.1.164:8080/RejectWebService.asmx?wsdl
然后在浏览器中打开就可以得到如下图片所示:

Android平台调用WebService详解_第2张图片
image.png

Android平台调用WebService详解_第3张图片
image.png

1:表示的是调用的方法名称 methodName
2:表示的是soapAction
3:表示的是命名空间nameSpace

另外,别忘了导包和Internet的权限!

是不是很简单,小伙伴们!

在所有的道别里,我还是最喜欢明天见。承蒙你出现,够我喜欢好多年 ​​​。

你可能感兴趣的:(Android平台调用WebService详解)