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

上传人:b****8 文档编号:9977882 上传时间:2023-02-07 格式:DOCX 页数:35 大小:551.08KB
下载 相关 举报
Android与服务器端数据交互.docx_第1页
第1页 / 共35页
Android与服务器端数据交互.docx_第2页
第2页 / 共35页
Android与服务器端数据交互.docx_第3页
第3页 / 共35页
Android与服务器端数据交互.docx_第4页
第4页 / 共35页
Android与服务器端数据交互.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

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

《Android与服务器端数据交互.docx》由会员分享,可在线阅读,更多相关《Android与服务器端数据交互.docx(35页珍藏版)》请在冰豆网上搜索。

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

Android与服务器端数据交互

Android与服务器端数据交互(基于SOAP协议整合android+webservice)

上一节中我们通过http协议,采用HttpClient向服务器端action请求数据。

当然调用服务器端方法获取数据并不止这一种。

WebService也可以为我们提供所需数据,

那么什么是webService呢?

,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起。

 我们在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,做过JAVAME的人都知道有KSOAP这个第三方的类库,可以帮助我们获取服务器端webService调用,当然KSOAP已经提供了基于android版本的jar包了,那么我们就开始吧:

首先下载KSOAP包:

ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包

然后新建android项目:

并把下载的KSOAP包放在android项目的lib目录下:

右键->buildpath->configurebuildpath--选择Libraries,如图:

以下分为七个步骤来调用WebService方法:

第一:

实例化SoapObject对象,指定webService的命名空间(从相关WSDL文档中可以查看命名空间),以及调用方法名称。

如:

ViewCode

//命名空间

privatestaticfinalStringserviceNameSpace="http:

//WebX

//调用方法(获得支持的城市)

privatestaticfinalStringgetSupportCity="getSupportCity";

//实例化SoapObject对象

SoapObjectrequest=newSoapObject(serviceNameSpace,getSupportCity);

第二步:

假设方法有参数的话,设置调用方法参数

request.addProperty("参数名称","参数值");

第三步:

设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致):

ViewCode

//获得序列化的Envelope

SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.bodyOut=request;

第四步:

注册Envelope,

(newMarshalBase64()).register(envelope);

第五步:

构建传输对象,并指明WSDL文档URL:

ViewCode

//请求URL

privatestaticfinalStringserviceURL="

//Android传输对象

AndroidHttpTransporttransport=newAndroidHttpTransport(serviceURL);

transport.debug=true;

第六步:

调用WebService(其中参数为1:

命名空间+方法名称,2:

Envelope对象):

ViewCode

transport.call(serviceNameSpace+getWeatherbyCityName,envelope);

第七步:

解析返回数据:

ViewCode

if(envelope.getResponse()!

=null){

returnparse(envelope.bodyIn.toString());

}

/**************

*解析XML

*@paramstr

*@return

*/

privatestaticListparse(Stringstr){

Stringtemp;

Listlist=newArrayList();

if(str!

=null&&str.length()>0){

intstart=str.indexOf("string");

intend=str.lastIndexOf(";");

temp=str.substring(start,end-3);

String[]test=temp.split(";");

for(inti=0;i

if(i==0){

temp=test[i].substring(7);

}else{

temp=test[i].substring(8);

}

intindex=temp.indexOf(",");

list.add(temp.substring(0,index));

}

}

returnlist;

}

这样就成功啦。

那么现在我们就来测试下吧,这里有个地址提供webService天气预报的服务的,我这里只提供获取城市列表:

ViewCode

//命名空间

privatestaticfinalStringserviceNameSpace="http:

//WebX

//请求URL

privatestaticfinalStringserviceURL="

//调用方法(获得支持的城市)

privatestaticfinalStringgetSupportCity="getSupportCity";

//调用城市的方法(需要带参数)

privatestaticfinalStringgetWeatherbyCityName="getWeatherbyCityName";

//调用省或者直辖市的方法(获得支持的省份或直辖市)

privatestaticfinalStringgetSupportProvince="getSupportProvince";

 然后你可以在浏览器中输入地址(WSDL):

serviceURL,你会看到一些可供调用的方法:

 我们选择获取国内外主要城市或者省份的方法吧:

getSupportProvice,然后调用,你会发现浏览器返回给我们的是xml文档:

ViewCode

xmlversion="1.0"encoding="utf-8"?

>

-

xsi="http:

//www.w3.org/2001/XMLSchema-instance"xmlns:

xsd="http:

//www.w3.org/2001/XMLSchema"xmlns="http:

//WebX

直辖市

特别行政区

黑龙江

吉林

辽宁

内蒙古

河北

河南

山东

山西

江苏

安徽

陕西

宁夏

甘肃

青海

湖北

湖南

浙江

江西

福建

贵州

四川

广东

广西

云南

海南

新疆

西藏

台湾

亚洲

欧洲

非洲

北美洲

南美洲

大洋洲

我们可以用listview来显示:

那么下面我将给出全部代码:

ViewCode

publicclassWebServiceHelper{

//WSDL文档中的命名空间

privatestaticfinalStringtargetNameSpace="http:

//WebX

//WSDL文档中的URL

privatestaticfinalStringWSDL="

//需要调用的方法名(获得本天气预报WebServices支持的洲、国内外省份和城市信息)

privatestaticfinalStringgetSupportProvince="getSupportProvince";

//需要调用的方法名(获得本天气预报WebServices支持的城市信息,根据省份查询城市集合:

带参数)

privatestaticfinalStringgetSupportCity="getSupportCity";

//根据城市或地区名称查询获得未来三天内天气情况、现在的天气实况、天气和生活指数

privatestaticfinalStringgetWeatherbyCityName="getWeatherbyCityName";

/********

*获得州,国内外省份和城市信息

*@return

*/

publicListgetProvince(){

Listprovinces=newArrayList();

Stringstr="";

SoapObjectsoapObject=newSoapObject(targetNameSpace,getSupportProvince);

//request.addProperty("参数","参数值");调用的方法参数与参数值(根据具体需要可选可不选)

SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.dotNet=true;

envelope.setOutputSoapObject(soapObject);//envelope.bodyOut=request;

AndroidHttpTransporthttpTranstation=newAndroidHttpTransport(WSDL);

//或者HttpTransportSEhttpTranstation=newHttpTransportSE(WSDL);

try{

httpTranstation.call(targetNameSpace+getSupportProvince,envelope);

SoapObjectresult=(SoapObject)envelope.getResponse();

//下面对结果进行解析,结构类似json对象

//str=(String)result.getProperty(6).toString();

intcount=result.getPropertyCount();

for(intindex=0;index

provinces.add(result.getProperty(index).toString());

}

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(XmlPullParserExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returnprovinces;

}

/**********

*根据省份或者直辖市获取天气预报所支持的城市集合

*@paramprovince

*@return

*/

publicListgetCitys(Stringprovince){

Listcitys=newArrayList();

SoapObjectsoapObject=newSoapObject(targetNameSpace,getSupportCity);

soapObject.addProperty("byProvinceName",province);

SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.dotNet=true;

envelope.setOutputSoapObject(soapObject);

AndroidHttpTransporthttpTransport=newAndroidHttpTransport(WSDL);

try{

httpTransport.call(targetNameSpace+getSupportCity,envelope);

SoapObjectresult=(SoapObject)envelope.getResponse();

intcount=result.getPropertyCount();

for(intindex=0;index

citys.add(result.getProperty(index).toString());

}

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(XmlPullParserExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returncitys;

}

/***************************

*根据城市信息获取天气预报信息

*@paramcity

*@return

***************************/

publicWeatherBeangetWeatherByCity(Stringcity){

WeatherBeanbean=newWeatherBean();

SoapObjectsoapObject=newSoapObject(targetNameSpace,getWeatherbyCityName);

soapObject.addProperty("theCityName",city);//调用的方法参数与参数值(根据具体需要可选可不选)

SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.dotNet=true;

envelope.setOutputSoapObject(soapObject);//envelope.bodyOut=request;

AndroidHttpTransporthttpTranstation=newAndroidHttpTransport(WSDL);

//或者HttpTransportSEhttpTranstation=newHttpTransportSE(WSDL);

try{

httpTranstation.call(targetNameSpace+getWeatherbyCityName,envelope);

SoapObjectresult=(SoapObject)envelope.getResponse();

//下面对结果进行解析,结构类似json对象

bean=parserWeather(result);

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(XmlPullParserExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returnbean;

}

/**

*解析返回的结果

*@paramsoapObject

*/

protectedWeatherBeanparserWeather(SoapObjectsoapObject){

WeatherBeanbean=newWeatherBean();

List>list=newArrayList>();

Mapmap=newHashMap();

//城市名

bean.setCityName(soapObject.getProperty

(1).toString());

//城市简介

bean.setCityDescription(soapObject.getProperty(soapObject.getPropertyCount()-1).toString());

//天气实况+建议

bean.setLiveWeather(soapObject.getProperty(10).toString()+"\n"+soapObject.getProperty(11).toString());

//其他数据

//日期,

Stringdate=soapObject.getProperty(6).toString();

//---------------------------------------------------

StringweatherToday="今天:

"+date.split("")[0];

weatherToday+="\n天气:

"+date.split("")[1];

weatherToday+="\n气温:

"+soapObject.getProperty(5).toString();

weatherToday+="\n风力:

"+soapObject.getProperty(7).toString();

weatherToday+="\n";

Listicons=newArrayList();

icons.add(parseIcon(soapObject.getProperty(8).toString()));

icons.add(parseIcon(soapObject.getProperty(9).toString()));

map.put("weatherDay",weatherToday);

map.put("icons",icons);

list.add(map);

//-------------------------------------------------

map=newHashMap();

date=soapObject.getProperty(13).toString();

StringweatherTomorrow="明天:

"+date.split("")[0];

weatherTomorrow+="\n天气:

"+date.split("")[1];

weatherTomorrow+="\n气温:

"+soapObject.getProperty(12).toString();

weatherTomorrow+="\n风力:

"+soapObject.getProperty(14).toString();

weatherTomorrow+="\n";

icons=newArrayList();

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=newHashMap()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

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

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