Android使用ksoap2调用webservice

本文介绍如何在Android中使用ksoap2调用WebService。首先,选取http://ws.webxml.com.cn/WebServices/WeatherWS.asmx的getRegionProvince方法作为测试接口。接着,下载并引入ksoap2的jar包到Android Studio项目中。然后,详细讲解了设置SOAP参数、从webservice获取数据和在主线程显示数据的步骤,包括AsyncTask的使用。通过这个简单的实例,为开发基于webservice的复杂Android应用打下基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.使用免费的webservice接口

这里我们使用的是http://ws.webxml.com.cn/WebServices/WeatherWS.asmx这个接口作测试,如下图所示

接口界面

这里列出了许多方法,我们这里选用getRegionProvince这个方法。它可以获得中国的所有省份信息。

这里我们点击getRegionProvince进去看一看

这里写图片描述

这个页面便是这个方法的详细描述,我们点击一下“调用”按钮,就可以测试一下这个接口,我这里就不截图了,它会返回一个XML文档,列出省份的信息。

2.下载ksoap2

我使用的是Android Studio这款软件开发,但是我没找到如何直接用Gradle下载这个库,所以就直接下载jar包好啦^_^
http://simpligility.github.io/ksoap2-android/getting-started.html

这里写图片描述

在这里下载最新的jar包就可以了,然后把它放到这里,注意蓝色框框的地方要选择project哦

这里写图片描述

app下的 build.gradle 中加上这一句,然后重新构建gradle就可以啦~

compile files('libs/ksoap2-android-assembly-3.6.2-jar-with-dependencies.jar')

3.使用ksoap2调用webserivce

大致分为以下几步

1. 设置参数

这里我们需要设置4个参数,分别是SOAP_ACTION、NAMESPACE、METHOD_NAME和URL,让我们再来看一下webservice的页面。
这里写图片描述

图片中标明了这几个参数,还有一个URL参数,就是WSDL文件的地址了
http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL
WSDL文件就是描述这个web服务的XML文件

我这里在界面中放了一个按钮,在Click事件中请求这个webservice。

下面是定义这几个参数的代码:

private static String SOAP_ACTION="http://WebXml.com.cn/getRegionProvince";
private static String NAMESPACE="http://WebXml.com.cn/";
private static String METHOD_NAME="getRegionProvince";
private static String URL="http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL";

2.从webservice上获取数据

我们写一个函数getInformation() 用来获取从webservice上返回的数据。

private SoapObject getInformation(){
        SoapObject request=new SoapObject(NAMESPACE,METHOD_NAME);
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setOutputSoapObject(request);
        try{
            HttpTransportSE transportSE=new HttpTransportSE(URL);
            transportSE.call(SOAP_ACTION,envelope); 
            SoapObject result=(SoapObject)envelope.bodyIn; //获取到返回的结果,并强制转换成SoapObject对象       
            SoapObject test = (SoapObject)result.getProperty(0); //该对象中还嵌套了一个SoapObject对象,需要使用getProperty(0)把这个对象提取出来
            return test;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

3.从主线程上显示数据

由于这是一个网络请求,必须在子线程上进行,我们这里使用AsyncTask类。

class DownloadTask extends AsyncTask<Void,Integer,Boolean>{

        @Override
        protected Boolean doInBackground(Void... voids) {
            result =  getInformation(); //在子线程中请求webservice
            return null;
        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {
           StringBuilder builder = new StringBuilder();
           //解析返回的数据
           for(int i=0;i<result.getPropertyCount();i++){
               builder.append(result.getProperty(i));
           }
            Toast.makeText(MainActivity.this, builder.toString(), Toast.LENGTH_SHORT).show();
        }
    }

最后在按钮点击事件中执行这个AsyncTask就可以啦!

new DownloadTask().execute();

看一下最后的效果吧^_^
这里写图片描述
点击“请求WEBSERVICE接口”,就可以显示数据啦!

4.小结

这个算是最最简单的功能了,但是有了这个做基础,想做基于webservice的复杂Android应用也不在话下啦!学习新的技术,都要从一个最简单的DEMO开始,就像Hello World!一样,有了它作为敲门砖,后面的路就越来越轻松了= ̄ω ̄=

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值