Android使用ksoap2调用webservice

来源:互联网 发布:淘宝店铺全套免费模板 编辑:程序博客网 时间:2024/05/16 17:33

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!一样,有了它作为敲门砖,后面的路就越来越轻松了= ̄ω ̄=

原创粉丝点击