ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:414.61KB ,
资源ID:5026665      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5026665.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android与服务器端数据交互.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Android与服务器端数据交互.docx

1、Android与服务器端数据交互作者:东子哥来源:博客园发布时间: 2011-04-24 21:43阅读: 2358 次上一节中我们通过http协议,采用HttpClient向服务器端action请求数据。当然调用服务器端方法获取数据并不止这一种。WebService也可以为我们提供所需数据,那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起。我们在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的and

2、roid手机客户端,做过JAVA ME的人都知道有KSOAP这个第三方的类库,可以帮助我们获取服务器端webService调用,当然KSOAP已经提供了基于android版本的jar包了,那么我们就开始吧:首先下载KSOAP包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包然后新建android项目:并把下载的KSOAP包放在android项目的lib目录下:右键-build path-configure build path-选择Libraries,如图:以下分为七个步骤来调用WebService方法:第一:实例化SoapOb

3、ject 对象,指定webService的命名空间(从相关WSDL文档中可以查看命名空间),以及调用方法名称。如:/命名空间private static final String serviceNameSpace=http:/WebX/调用方法(获得支持的城市)private static final String getSupportCity=getSupportCity;/实例化SoapObject对象SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);第二步:假设方法有参数的话,设置调用方法参数:requ

4、est.addProperty(参数名称,参数值);第三步:设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致):/获得序列化的EnvelopeSoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut=request;第四步:注册Envelope:(new MarshalBase64().register(envelope);第五步:构建传输对象,并指明WSDL文档URL:/请求URLprivate st

5、atic final String serviceURL=/Android传输对象AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL);transport.debug=true;第六步:调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象):transport.call(serviceNameSpace+getWeatherbyCityName, envelope);第七步:解析返回数据:if(envelope.getResponse()!=null) return parse(e

6、nvelope.bodyIn.toString(); /* * 解析XML * param str * return */ private static List parse(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=

7、0;itest.length;i+) if(i=0) temp=testi.substring(7); else temp=testi.substring(8); int index=temp.indexOf(,); list.add(temp.substring(0, index); return list; 这样就成功啦。那么现在我们就来测试下吧,这里有个地址提供webService天气预报的服务的,我这里只提供获取城市列表:/命名空间private static final String serviceNameSpace=http:/WebX/请求URLprivate static fi

8、nal String serviceURL=/调用方法(获得支持的城市)private static final String getSupportCity=getSupportCity;/调用城市的方法(需要带参数)private static final String getWeatherbyCityName=getWeatherbyCityName;/调用省或者直辖市的方法(获得支持的省份或直辖市)private static final String getSupportProvince=getSupportProvince;然后你可以在浏览器中输入地址(WSDL):serviceUR

9、L,你会看到一些可供调用的方法:我们选择获取国内外主要城市或者省份的方法吧:getSupportProvice,然后调用,你会发现浏览器返回给我们的是xml文档: - ArrayOfString xmlns:xsi=http:/www.w3.org/2001/XMLSchema-instance xmlns:xsd=http:/www.w3.org/2001/XMLSchema xmlns=http:/WebX 直辖市 特别行政区 黑龙江 吉林 辽宁 内蒙古 河北 河南 山东 山西 江苏 安徽 陕西 宁夏 甘肃 青海 湖北 湖南 浙江 江西 福建 贵州 四川 广东 广西 云南 海南 新疆 西藏

10、 台湾 亚洲 欧洲 非洲 北美洲 南美洲 大洋洲 我们可以用 listview来显示:那么下面我将给出全部代码:public class WebServiceHelper /WSDL文档中的命名空间 private static final String targetNameSpace=http:/WebX /WSDL文档中的URL private static final String WSDL= /需要调用的方法名(获得本天气预报Web Services支持的洲、国内外省份和城市信息) private static final String getSupportProvince=getSu

11、pportProvince; /需要调用的方法名(获得本天气预报Web Services支持的城市信息,根据省份查询城市集合:带参数) private static final String getSupportCity=getSupportCity; /根据城市或地区名称查询获得未来三天内天气情况、现在的天气实况、天气和生活指数 private static final String getWeatherbyCityName=getWeatherbyCityName; /* * 获得州,国内外省份和城市信息 * return */ public List getProvince() List

12、 provinces=new ArrayList(); String str=; SoapObject soapObject=new SoapObject(targetNameSpace,getSupportProvince); /request.addProperty(参数, 参数值);调用的方法参数与参数值(根据具体需要可选可不选) SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoap

13、Object(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(

14、); /下面对结果进行解析,结构类似json对象 /str=(String) result.getProperty(6).toString(); int count=result.getPropertyCount(); for(int index=0;indexcount;index+) provinces.add(result.getProperty(index).toString(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); catch (XmlPullParserExcept

15、ion e) / TODO Auto-generated catch block e.printStackTrace(); return provinces; /* * 根据省份或者直辖市获取天气预报所支持的城市集合 * param province * return */ public List getCitys(String province) List citys=new ArrayList(); SoapObject soapObject=new SoapObject(targetNameSpace,getSupportCity); soapObject.addProperty(byP

16、rovinceName, province); SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(soapObject); AndroidHttpTransport httpTransport=new AndroidHttpTransport(WSDL); try httpTransport.call(targetNameSpace+getSupportCity, enve

17、lope); SoapObject result=(SoapObject)envelope.getResponse(); int count=result.getPropertyCount(); for(int index=0;indexcount;index+) citys.add(result.getProperty(index).toString(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); catch (XmlPullParserException e) / TODO Au

18、to-generated catch block e.printStackTrace(); return citys; /* * 根据城市信息获取天气预报信息 * param city * return */ public WeatherBean getWeatherByCity(String city) WeatherBean bean=new WeatherBean(); SoapObject soapObject=new SoapObject(targetNameSpace,getWeatherbyCityName); soapObject.addProperty(theCityName

19、,city);/调用的方法参数与参数值(根据具体需要可选可不选) SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet=true; envelope.setOutputSoapObject(soapObject);/envelope.bodyOut=request; AndroidHttpTransport httpTranstation=new AndroidHttpTransport(WSDL); /或者HttpTransportSE htt

20、pTranstation=new HttpTransportSE(WSDL); try httpTranstation.call(targetNameSpace+getWeatherbyCityName, envelope); SoapObject result=(SoapObject)envelope.getResponse(); /下面对结果进行解析,结构类似json对象 bean=parserWeather(result); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); catch

21、 (XmlPullParserException e) / TODO Auto-generated catch block e.printStackTrace(); return bean; /* * 解析返回的结果 * param soapObject */ protected WeatherBean parserWeather(SoapObject soapObject) WeatherBean bean=new WeatherBean(); ListMap list=new ArrayListMap(); Map map=new HashMap(); /城市名 bean.setCityN

22、ame(soapObject.getProperty(1).toString(); /城市简介 bean.setCityDescription(soapObject.getProperty(soapObject.getPropertyCount()-1).toString(); /天气实况+建议 bean.setLiveWeather(soapObject.getProperty(10).toString()+n+soapObject.getProperty(11).toString(); /其他数据 /日期, String date=soapObject.getProperty(6).toS

23、tring(); /- String weatherToday=今天: + date.split( )0; weatherToday+=n天气:+ date.split( )1; weatherToday+=n气温:+soapObject.getProperty(5).toString(); weatherToday+=n风力:+soapObject.getProperty(7).toString(); weatherToday+=n; List icons=new ArrayList(); icons.add(parseIcon(soapObject.getProperty(8).toStr

24、ing(); icons.add(parseIcon(soapObject.getProperty(9).toString(); map.put(weatherDay, weatherToday); map.put(icons,icons); list.add(map); /- map=new HashMap(); date=soapObject.getProperty(13).toString(); String weatherTomorrow=明天: + date.split( )0; weatherTomorrow+=n天气:+ date.split( )1; weatherTomorr

25、ow+=n气温:+soapObject.getProperty(12).toString(); weatherTomorrow+=n风力:+soapObject.getProperty(14).toString(); weatherTomorrow+=n; icons=new ArrayList(); icons.add(parseIcon(soapObject.getProperty(15).toString(); icons.add(parseIcon(soapObject.getProperty(16).toString(); map.put(weatherDay, weatherTomorrow); map.put(icons,icons); list.add(map); /- map=new HashMap(); date=soapObject.getProperty(18).toString(); String weatherAfterTomorrow=后天: + date.split( )0; weatherAfterTo

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1