- 浏览: 215228 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
gotosuzhou:
我想问下, 怎么设置汉字 我这个验证码想要有汉字
kaptcha 验证码组件使用简介 -
摸爬滚打NO1:
很好,详细
kaptcha 验证码组件使用简介 -
guodage003:
这是怎么回事?
eclipse提示failed to create JVM -
joefei:
我修改第二个没用,修改了第一个,size为128才可以
eclipse提示failed to create JVM -
tingle:
签名后的,可以吗?
Android APK反编译
转自:http://www.open-open.com/bbs/view/1320114015061
通过http协议,采用HttpClient向服务器端action请求数据。当然调用服务器端方法获取数据并不止这一种。WebService也可以为我们提供所需数据,
那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起。
我们在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,
做过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方法:
第一:实例化SoapObject 对象,指定webService的命名空间(从相关WSDL文档中可以查看命名空间),以及调用方法名称。如:
//命名空间 //调用方法(获得支持的城市) private static final String getSupportCity= "getSupportCity" ;
//实例化SoapObject对象 SoapObject request= new SoapObject(serviceNameSpace, getSupportCity);
|
第二步:假设方法有参数的话,设置调用方法参数
request.addProperty("参数名称","参数值");
第三步:设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致):
第四步:注册Envelope,
(new MarshalBase64()).register(envelope);
第五步:构建传输对象,并指明WSDL文档URL:
第六步:调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象):
第七步:解析返回数据:
if (envelope.getResponse()!= null ){
return parse(envelope.bodyIn.toString());
} /**************
* 解析XML
* @param str
* @return */ private static List<String> parse(String str){
String temp;
List<String> list= new ArrayList<String>();
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<test.length;i++){
if (i== 0 ){
temp=test[i].substring( 7 );
} else {
temp=test[i].substring( 8 );
}
int index=temp.indexOf( "," );
list.add(temp.substring( 0 , index));
}
}
return list;
}
|
这样就成功啦。那么现在我们就来测试下吧,这里有个地址提供webService天气预报的服务的,我这里只提供获取城市列表:
//命名空间 //请求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文档:
<?xml version= "1.0" encoding= "utf-8" ?>
- <ArrayOfString xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd= "http://www.w3.org/2001/XMLSchema" xmlns= "http://WebXml.com.cn/" ><br> <string>直辖市</string>
<string>特别行政区</string>
<string>黑龙江</string>
<string>吉林</string>
<string>辽宁</string>
<string>内蒙古</string>
<string>河北</string>
<string>河南</string>
<string>山东</string>
<string>山西</string>
<string>江苏</string>
<string>安徽</string>
<string>陕西</string>
<string>宁夏</string>
<string>甘肃</string>
<string>青海</string>
<string>湖北</string>
<string>湖南</string>
<string>浙江</string>
<string>江西</string>
<string>福建</string>
<string>贵州</string>
<string>四川</string>
<string>广东</string>
<string>广西</string>
<string>云南</string>
<string>海南</string>
<string>新疆</string>
<string>西藏</string>
<string>台湾</string>
<string>亚洲</string>
<string>欧洲</string>
<string>非洲</string>
<string>北美洲</string>
<string>南美洲</string>
<string>大洋洲</string>
</ArrayOfString>
|
我们可以用 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 List<String> getProvince(){
List<String> provinces= new ArrayList<String>();
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<count;index++){
provinces.add(result.getProperty(index).toString());
}
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block e.printStackTrace();
}
return provinces;
}
/**********
* 根据省份或者直辖市获取天气预报所支持的城市集合
* @param province
* @return */ public List<String> getCitys(String province){
List<String> citys= new ArrayList<String>();
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<count;index++){
citys.add(result.getProperty(index).toString());
}
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-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" ,city); //调用的方法参数与参数值(根据具体需要可选可不选)
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+getWeatherbyCityName, envelope);
SoapObject result=(SoapObject)envelope.getResponse();
//下面对结果进行解析,结构类似json对象 bean=parserWeather(result);
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block e.printStackTrace();
}
return bean;
}
/** * 解析返回的结果
* @param soapObject
*/ protected WeatherBean parserWeather(SoapObject soapObject){
WeatherBean bean= new WeatherBean();
List<Map<String,Object>> list= new ArrayList<Map<String,Object>>();
Map<String,Object> map= new HashMap<String,Object>();
//城市名 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());
//其他数据
//日期, String date=soapObject.getProperty(6).toString();
//--------------------------------------------------- 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<Integer> icons= new ArrayList<Integer>();
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=new HashMap<String,Object>();
date=soapObject.getProperty( 13 ).toString();
String weatherTomorrow= "明天:" + date.split( " " )[ 0 ];
weatherTomorrow+= "\n天气:" + date.split( " " )[ 1 ];
weatherTomorrow+= "\n气温:" +soapObject.getProperty( 12 ).toString();
weatherTomorrow+= "\n风力:" +soapObject.getProperty( 14 ).toString();
weatherTomorrow+= "\n" ;
icons= new ArrayList<Integer>();
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<String,Object>();
date=soapObject.getProperty( 18 ).toString();
String weatherAfterTomorrow= "后天:" + date.split( " " )[ 0 ];
weatherAfterTomorrow+= "\n天气:" + date.split( " " )[ 1 ];
weatherAfterTomorrow+= "\n气温:" +soapObject.getProperty( 17 ).toString();
weatherAfterTomorrow+= "\n风力:" +soapObject.getProperty( 19 ).toString();
weatherAfterTomorrow+= "\n" ;
icons= new ArrayList<Integer>();
icons.add(parseIcon(soapObject.getProperty( 20 ).toString()));
icons.add(parseIcon(soapObject.getProperty( 21 ).toString()));
map.put( "weatherDay" , weatherAfterTomorrow);
map.put( "icons" ,icons);
list.add(map);
//--------------------------------------------------------------
bean.setList(list);
return bean;
}
//解析图标字符串 private int parseIcon(String data){
// 0.gif,返回名称0, int resID=32;
String result=data.substring( 0 , data.length()- 4 ).trim();
// String []icon=data.split(".");
// String result=icon[0].trim();
// Log.e("this is the icon", result.trim());
if (!result.equals( "nothing" )){
resID=Integer.parseInt(result.trim());
}
return resID;
//return ("a_"+data).split(".")[0]; }
} |
以及帮助类:
public class WebServiceUtil {
//命名空间 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";
/*************
* @return城市列表
*************/ public static List<String> getCityList(){
//实例化SoapObject对象 SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);
//获得序列化的Envelope SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut=request;
( new MarshalBase64()).register(envelope);
//Android传输对象 AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL);
transport.debug= true ;
//调用 try {
transport.call(serviceNameSpace+getWeatherbyCityName, envelope);
if (envelope.getResponse()!= null ){
return parse(envelope.bodyIn.toString());
}
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block e.printStackTrace();
}
return null ;
}
public static List<String> getProviceList(){
//实例化SoapObject对象 SoapObject request=new SoapObject(serviceNameSpace, getSupportProvince);
//获得序列化的Envelope SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut=request;
( new MarshalBase64()).register(envelope);
//Android传输对象 AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL);
transport.debug= true ;
//调用 try {
transport.call(serviceNameSpace+getWeatherbyCityName, envelope);
if (envelope.getResponse()!= null ){
return null ;
}
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block e.printStackTrace();
}
return null ;
}
/*************
* @param cityName
* @return *************/ public static String getWeather(String cityName){
return "" ;
}
/**************
* 解析XML
* @param str
* @return */ private static List<String> parse(String str){
String temp;
List<String> list= new ArrayList<String>();
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<test.length;i++){
if (i== 0 ){
temp=test[i].substring( 7 );
} else {
temp=test[i].substring( 8 );
}
int index=temp.indexOf( "," );
list.add(temp.substring( 0 , index));
}
}
return list;
}
/*********
* 获取天气
* @param soapObject
*/ private void parseWeather(SoapObject soapObject){
//String date=soapObject.getProperty(6); }
} |
以上就是我所作的查询天气预报的全部核心代码了,读者可以根据注释以及本文章了解下具体实现,相信很快就搞明白了,运行结果如下:
发表评论
-
android2.2根据电话号码查询联系人姓名的方法
2012-09-16 23:28 2475public class AndroidTest extend ... -
Android下PopupWindow隐藏及显示(showAtLocation/showAsDropDown)
2012-08-26 00:56 13070上一篇对PopupWindow的用法(位置、动画、焦点)做了详 ... -
Android中PopupWindow的用法(位置、动画、焦点)
2012-08-26 00:54 2024在Android中有很多级别的Window,不同级别的Wind ... -
Color android
2012-08-24 15:07 1176有以下12种常见的颜色: Color.BLACK ... -
【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
2012-08-16 15:03 984在进行UI布局的时候,可能经常会用到 android:g ... -
android ksoap 报错 org.xmlpull.v1.XmlPullParserException: expected: START_TAG 的解决经
2012-08-14 19:47 0在android上 调用webservice出现这个错误 ... -
Android 实现省份城市的选择,并获取城市编号
2012-08-14 00:47 18752该程序主要使用 中央气象局 省份 城市数据库为基础 进行 ... -
让你全面了解SQLite
2012-08-14 00:45 1365一.SQLite的介绍1.SQLite简介SQLite是 ... -
android 模拟器手机如何添加文件到sd卡
2012-08-14 00:05 1357使用android手机模拟器 ... -
Eclipse用svn管理Android项目问题
2012-08-11 15:10 947用svn控制版本,svn本身是不会识别哪些该传,哪些不该 ... -
ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)
2012-08-11 14:58 1071在android开发中,经 ... -
关于eclipse中关联各版本Android.jar对应的源代码方法
2012-08-11 13:59 1000网上看了很多关于在Android APP开发时,将And ... -
深度解析Handler类,以及HandlerThread
2012-08-11 13:43 1333Handler,HandlerThread下次再写;1)核心成 ... -
android在处理一写图片资源
2012-08-09 23:01 8251、Drawable → Bitmap publ ... -
Android用ImageView显示本地和网上的图片
2012-08-09 22:48 5429ImageView是Android程序中经常用到的组件, ... -
Android中LayoutInflater的使用
2012-08-09 18:42 969Inflater英文意思是膨胀,在Android中应该是 ... -
Android模拟器代理设置
2012-08-09 16:03 18104方法一 首先,Windows下,配置Adro ... -
android中ListView控件&&onItemClick点击事件
2012-08-09 15:46 1078转自:http://hi.baidu.com/ilybeen/ ... -
Android 获取设备各种信息以及其它
2012-08-06 14:27 1432做手机开发,想必都希望获取手机号码吧,android中有 ... -
android 安卓APP获取手机设备信息和手机号码的代码示例
2012-08-06 14:26 1868下面我从安卓开发的角度,简单写一下如何获取手机设备信息和 ...
相关推荐
### Android与服务器端数据交互(基于SOAP协议整合Android+WebService) 在移动应用开发领域,特别是Android平台上,实现客户端与服务器之间的高效数据交换是一项至关重要的任务。本文将详细介绍如何利用SOAP协议来...
本文将详细介绍如何基于SOAP协议整合Android与Web服务,以便在Android客户端调用服务器提供的功能。SOAP(Simple Object Access Protocol)是一种轻量级的、基于XML的协议,用于在Web上交换结构化和类型化的信息。 ...
"Android 与服务器端数据交互基于 SOAP 协议" Android 与服务器端数据交互是移动应用程序开发的重要组成部分。在 Android 中,我们可以使用多种方式与服务器端进行数据交互,例如使用 HttpClient 通过 HTTP 协议...
Android 与服务器端数据交互是移动应用开发中的一项重要技术,Android 客户端需要通过某种方式与服务器端进行数据交互,来获取或发送数据。HTTP 协议和WebService 是两种常见的数据交互方式。 HTTP协议 在上一节...
通过使用 KSOAP 库,我们可以轻松地调用 WebService 方法,实现 Android 客户端与服务器端数据交互。 Android 客户端与服务器端数据交互是移动应用开发中非常重要的一部分。通过使用 WebService,我们可以实现跨...
本主题将深入探讨如何在Android应用中调用Web服务,特别是基于SOAP协议的Web服务,即“Android与服务器端数据交互(基于SOAP协议整合android+webservice)”。 SOAP(Simple Object Access Protocol)是一种轻量级...
在Android开发中,有时我们需要与服务器进行数据交互,这时候Webservice技术就显得尤为重要。本教程将详细介绍如何在Android环境中调用Webservice,并提供源码和jar包以供参考。主要涉及的技术点包括SOAP协议、HTTP...
【WebService】:WebService是一种基于XML...对于Android客户端,它们可以通过调用这些WebService接口来与服务器进行数据交互。在Android端的项目中,将会有相应的适配和调用方法,以便顺利连接和使用此服务器端服务。
总之,这个示例展示了如何使用Apache CXF、WSS4J和Spring框架构建一个安全的、基于Java的Web服务,并提供了客户端和服务器端的实现。对于想要深入理解Web服务开发和安全性的开发者来说,这是一个很好的学习资源。...
在实现 Android 与服务器的数据交互时,可以选择多种方式,例如使用 HttpClient 向服务器端发起请求或者利用 WebService。本文将以 WebService 为例进行详细介绍。 - **HttpClient**:一种轻量级的 HTTP 请求处理...
【标题】"webservice整合了hibernate"指的是在软件开发中,将Web服务(Web Service)与持久层框架Hibernate进行了集成,以便于通过Web接口访问和操作数据库。这种集成方式使得分布式系统能够利用Web服务的优势,同时...
3. WebService:WebService是一种基于标准协议(如SOAP、WSDL和UDDI)的软件接口,允许不同系统之间的数据交换。在手机控制电脑的场景下,WebService作为通信桥梁,手机客户端通过调用WebService接口,向服务器发送...
3. **WebService技术:**实现客户端与服务器端的数据交换,包括JSON数据格式、HTTPClient通信方式、SOAP协议等。 **开发环境:** 1. **Android SDK 2.1及以上版本:**为Android手机客户端开发提供必要的开发工具和...
WebService是一种基于SOAP协议的远程调用标准,它能够实现跨操作系统平台、编程语言和技术的整合。这种特性使得WebService成为了一个非常重要的工具,尤其是在需要实现系统间通信的情况下。尽管Android SDK本身并...
Web Service是一种通过网络提供服务的方式,通常基于SOAP(Simple Object Access Protocol)或者REST(Representational State Transfer)协议,使得客户端(在这个案例中是Android应用)能够与服务器端进行数据交换...
例如,Java可以用于开发服务器端的应用,实现与数据库的交互,处理大规模的数据流,以及提供安全的网络通信服务。此外,Java还支持微服务架构,使得企业能够构建灵活、可扩展的信息系统。 #### 与企业软件结合 ...