您的位置:首页 > 移动开发 > Android开发

Android使用ksoap2调用webservice

2017-08-07 14:43 337 查看

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!一样,有了它作为敲门砖,后面的路就越来越轻松了= ̄ω ̄=
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android web service