android中简单搞定webservice接口访问,以及webservice简析
最近总结的一些经验,对于android或java中使用webservice接口的一些心得。不过需要注意的是,在android中,以下代码需要在子线程中使用。好了,废话不多说了,直接上代码,只是一个代码块,输出结果需要自己查看一下日志
这个是一个天气查询的webservice接口,大家也可以尝试一下。不让发是么。。www.webxml.com.cn/WebServices/WeatherWebService.asmx
需要注意一下,下面的代码需要ksoap2-android-assembly的jar包,自己百度搜索下载一下吧。算了,想了想还是给贴上吧,我自己的网盘
pan.baidu.com/s/1qXBrPkK 密码:atri
上面连接可能失效,到时候请大家自己搜索下载吧,csdn上面应该有,上面是2个版本的,一个老版本,一个较新的,我用的是老版本的,新版本暂时没试过
我实例中使用的是getSupportCity方法
以下代码是我直接从android studio上面拷贝的,第一次写这个,
不太会搞。
String namespace = "http://WebXml.com.cn/";String transUrl = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx";String method = "getSupportCity";//注意版本使用,这个需要跟后台询问或者从wsdl文档或者服务说明中查看int envolopeVersion = SoapEnvelope.VER12;//可能是namspace+method拼接String soapAction = "http://WebXml.com.cn/getSupportCity";SoapObject request = new SoapObject(namespace, method);//参数一定注意要有序,尽管是addProperty(),不要当作HttpUrl可以使用LinkedHashMap封装request.addProperty("byProvinceName", "湖北");// SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(envolopeVersion);envelope.setOutputSoapObject(request);envelope.dotNet = true;HttpTransportSE se = new HttpTransportSE(transUrl);try { // se.call(soapAction, envelope); //ver11,第一个参数不能为空 se.call(null, envelope);//envolopeVersion为ver12第一个参数可以为空,必须接口支持ver12才行 SoapObject response = (SoapObject) envelope.bodyIn; //response的处理需要根据返回的具体情况,基本都要进行下面一步 SoapObject o = (SoapObject) response.getProperty(0); //当前方法返回的结果为一个数组 Log.e("zjy", "MainActivity.java->run(): size=" + o.getPropertyCount()); for (int i = 0; i < o.getPropertyCount(); i++) { Log.e("zjy", "MainActivity.java->run(): ==" + o.getPropertyAsString(i)); }} catch (IOException e) { e.printStackTrace();} catch (XmlPullParserException e) { e.printStackTrace();}
对于代码注释看不太明白的,请结合下面的图片一起理解,谢谢。对于上述代码返回的结果,不同的webservice接口可能不一样,需要多跟后台沟通,我用的接口都是后台大哥帮我转成json数据了的,好人呐。在此不禁要赞后台大哥一下:荣哥威武!!!
下面是一张图片,对上述代码中的参数的对应,这个是wsdl文档,就是在地址后面加?wsdl之后得到的,也有另外一种的查看方式,我也会贴上。
推荐看wsdl文档,包含的信息量更大,也更精准,虽然有些我也不知道是啥意思,当然了大家一起研究。上面的图片中没有说到soapAction,下面马上贴上。以下也是在wsdl文档里面,一般在最下面wsdl:binding标签。android中主要是用到下面的图片中的soap和soap12结尾的,分别对应Ver11和Ver12,就是上面
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(envolopeVersion);
构造方法中传入的envolopeVersion
展开第一个WeatherWebServiceSoap可以看到每个方法对应的soapAction,看下图
刚刚说好给大家看另外一种简单的办法的,下面来了。正常大家进入这个webservice之后点击每一个方法会出现下面的描述,注意不是所有的webservice接口都是有这样的描述的,所以还是请大家多看wsdl文档。这个是ver11的,ver12类似,只是不用传soapAction。
好了,大概也就这些东西了,有什么问题我看到了会回复,但是也不一定哈,看见了就回了。基本没问题了,完工。
还请大家自己也多思考一下,我上面用到的东西基本都已经说清楚了,一遍不懂可以多看两遍
更多相关文章
- Android中 AIDL 的简单实用例子
- Android(安卓)Service更新UI的方法之AIDL
- Android(安卓)在代码中控制View的填充方式和宽度、高度
- 测试freg驱动的功能内置C程程序
- 绝对精品—史上最全最权威的Android(安卓)Studio插件整理
- Android:IPC之AIDL的学习和总结
- Android程序开发通过HttpURLConnection上传文件到服务器
- 现有的Android(安卓)原生项目里面集成RN 页面的学习和踩坑之路
- 非android的平台获取apk信息