今天就跟大家聊聊有关Android中怎么与服务器端数据进行交互,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
在保亭黎族等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、成都做网站 网站设计制作按需求定制制作,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站建设,外贸网站建设,保亭黎族网站建设费用合理。
首先下载KSOAP包:
ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar
然后新建android项目:并把下载的KSOAP包放在android项目的lib目录下:右键->build path->configure build path--选择Libraries,如图:
以下分为七个步骤来调用WebService方法:
1、实例化SoapObject 对象,指定webService的命名空间(从相关WSDL文档中可以查看命名空间),以及调用方法名称。如:
//命名空间 private static final String serviceNameSpace="http://WebXml.com.cn/"; //调用方法(获得支持的城市) private static final String getSupportCity="getSupportCity"; //实例化SoapObject对象 SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);
2、假设方法有参数的话,设置调用方法参数
request.addProperty("参数名称","参数值");
3、设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致):
//获得序列化的Envelope SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut=request;
4、注册Envelope,
(new MarshalBase64()).register(envelope);
5、构建传输对象,并指明WSDL文档URL:
//请求URL private static final String serviceURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx"; //Android传输对象 AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL); transport.debug=true;
6、调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象):
transport.call(serviceNameSpace+getWeatherbyCityName, envelope);
7、解析返回数据:
if(envelope.getResponse()!=null){ return parse(envelope.bodyIn.toString()); } /************** * 解析XML * @param str * @return */ private static Listparse(String str){ String temp; List list=new ArrayList (); if(str!=null && str.length()>0){ int start=str.indexOf("string"); int end=str.lastIndexOf(";"); temp=str.substring(start, end-3); String []test=temp.split(";"); for(int i=0;i 这样就成功啦。那么现在我们就来测试下吧,这里有个地址提供webService天气预报的服务的,我这里只提供获取城市列表:
//命名空间 private static final String serviceNameSpace="http://WebXml.com.cn/"; //请求URL private static final String serviceURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx"; //调用方法(获得支持的城市) private static final String getSupportCity="getSupportCity"; //调用城市的方法(需要带参数) private static final String getWeatherbyCityName="getWeatherbyCityName"; //调用省或者直辖市的方法(获得支持的省份或直辖市) private static final String getSupportProvince="getSupportProvince";我们选择获取国内外主要城市或者省份的方法吧:getSupportProvice,然后调用,你会发现浏览器返回给我们的是xml文档:
直辖市 特别行政区 黑龙江 吉林 辽宁 内蒙古 河北 河南 山东 山西 江苏 安徽 陕西 宁夏 甘肃 青海 湖北 湖南 浙江 江西 福建 贵州 四川 广东 广西 云南 海南 新疆 西藏 台湾 亚洲 欧洲 非洲 北美洲 南美洲 大洋洲 我们可以用 listview来显示:
那么下面我将给出全部代码:
public class WebServiceHelper { //WSDL文档中的命名空间 private static final String targetNameSpace="http://WebXml.com.cn/"; //WSDL文档中的URL private static final String WSDL="http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl"; //需要调用的方法名(获得本天气预报Web Services支持的洲、国内外省份和城市信息) private static final String getSupportProvince="getSupportProvince"; //需要调用的方法名(获得本天气预报Web Services支持的城市信息,根据省份查询城市集合:带参数) private static final String getSupportCity="getSupportCity"; //根据城市或地区名称查询获得未来三天内天气情况、现在的天气实况、天气和生活指数 private static final String getWeatherbyCityName="getWeatherbyCityName"; /******** * 获得州,国内外省份和城市信息 * @return */ public ListgetProvince(){ List provinces=new ArrayList (); String str=""; SoapObject soapObject=new SoapObject(targetNameSpace,getSupportProvince); //request.addProperty("参数", "参数值");调用的方法参数与参数值(根据具体需要可选可不选) SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(soapObject);//envelope.bodyOut=request; AndroidHttpTransport httpTranstation=new AndroidHttpTransport(WSDL); //或者HttpTransportSE httpTranstation=new HttpTransportSE(WSDL); try { httpTranstation.call(targetNameSpace+getSupportProvince, envelope); SoapObject result=(SoapObject)envelope.getResponse(); //下面对结果进行解析,结构类似json对象 //str=(String) result.getProperty(6).toString(); int count=result.getPropertyCount(); for(int index=0;index getCitys(String province){ List citys=new ArrayList (); SoapObject soapObject=new SoapObject(targetNameSpace,getSupportCity); soapObject.addProperty("byProvinceName", province); SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(soapObject); AndroidHttpTransport httpTransport=new AndroidHttpTransport(WSDL); try { httpTransport.call(targetNameSpace+getSupportCity, envelope); SoapObject result=(SoapObject)envelope.getResponse(); int count=result.getPropertyCount(); for(int index=0;index > list=new ArrayList 上就是我所作的查询天气预报的全部核心代码了,读者可以根据注释以及本文章了解下具体实现,相信很快就搞明白了,运行结果如下:
看完上述内容,你们对Android中怎么与服务器端数据进行交互有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
文章名称:Android中怎么与服务器端数据进行交互
本文网址:http://cdxtjz.cn/article/gdsjjc.html