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开发)