- 浏览: 3505691 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
Android调用天气预报的WebService简单例子
下面例子改自网上例子:http://express.ruanko.com/ruanko-express_34/technologyexchange5.html
不过网上这个例子有些没有说明,有些情况不一样了,所以我重新写了。
一、获取并使用KSOAP包
在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WebService库非常丰 富,但这些对Android来说过于庞大。适合手机的WebService客户端的SDK有一些,比较常用的是KSOAP2。
KSOAP2 地址:http://code.google.com/p/ksoap2-android/
我下载的最新的是: ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar
注意:
我在使用ksoap2-android时犯了一个低级错误:使用时报错误:The import org.ksoap2 cannot be resolved。
当时分析这个问题时一直以为是Eclipse出了问题,找了好多方法都不行,
实际是我下载的ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar文件是错误的导致的,走了弯路。
在 http://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2 页面 通过鼠标右键链接另存为存的是同名的一个纯文本的Html文件。而不是我们想要的。
我是在
http://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.5.4/ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar
点 View raw file 才正确下载对应文件的。
选择我们的项目,右键菜单中 Build Path –> Add External Archives… 增加这个下载的包
增加好后,我们在 选择我们的项目,右键菜单中 Build Path –> Configure Build Path 的 Libraries 中可以看到下面图:
二,分以下几步来调用 WebService
1、指定 WebService 的命名空间和调用方法
import org.ksoap2.serialization.SoapObject; private static final String NAMESPACE = "http://WebXml.com.cn/ "; private static final String METHOD_NAME = "getWeatherbyCityName "; SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。
第二个参数表示要调用的WebService方法名。
2、设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:
rpc.addProperty("theCityName ", "北京 ");
要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
3、生成调用Webservice方法的SOAP请求信息。
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = rpc; envelope.dotNet = true ; envelope.setOutputSoapObject(rpc);
创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。
该版本号需要根据服务端WebService的版本号设置。
在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,
该属性的值就是在第一步创建的SoapObject对象。
4、创建HttpTransportsSE对象。
这里不要使用 AndroidHttpTransport ht = new AndroidHttpTransport(URL); 这是一个要过期的类
private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx "; HttpTransportSE ht = new HttpTransportSE(URL);
ht.debug = true;
5、使用call方法调用WebService方法
private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName "; ht.call(SOAP_ACTION, envelope);
网上有人说这里的call的第一个参数为null,但是经过我的测试,null是不行的。
第2个参数就是在第3步创建的SoapSerializationEnvelope对象。
6、获得WebService方法的返回结果
有两种方法:
1、使用getResponse方法获得返回数据。
private
SoapObject detail;
detail =(SoapObject) envelope.getResponse();
2、使用 bodyIn 及 getProperty。
private SoapObject detail; SoapObject result = (SoapObject)envelope.bodyIn; detail = (SoapObject) result.getProperty("getWeatherbyCityNameResult ");
7、 这时候执行会出错,提示没有权限访问网络
需要修改 AndroidManifest.xml 文件,赋予相应权限
简单来说就是增加下面这行配置:
完整的 AndroidManifest.xml 文件 如下:
注:Android 中在代码中为了调试写了system.out.print()输出项
在菜单:Window-->show view-->other-->找到Android,选择Logcat 是可以看到输出的,
如果你想在一个单独的窗口看到system.out.print()的输出的话,可以在logcat界面点那个绿色的“+”好,
在Filter name 和 By log tag里面均填入System.out,这样的话你就能在单独的界面查看system.out.print()的输出了!!
1.0" encoding="utf-8 "?> http://schemas.android.com/apk/res/android" package ="ghj1976.MyWeather " android:versionCode="1 " android:versionName="1.0 "> @drawable/icon" android:label="@string/app_name "> .MyWeatherActivity" android:label="@string/app_name "> android.intent.action.MAIN" /> android.intent.category.LAUNCHER" /> android.permission.INTERNET">
完整的代码如下:
package ghj1976.MyWeather; import java.io.UnsupportedEncodingException; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; //import org.ksoap2.transport.AndroidHttpTransport; import org.ksoap2.transport.HttpTransportSE; public class MyWeatherActivity extends Activity { private Button okButton; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); okButton = (Button) this .findViewById(R.id.btn_Search); okButton.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { String city = "北京 "; getWeather(city); } }); } private static final String NAMESPACE = "http://WebXml.com.cn/ "; // WebService地址 private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx "; private static final String METHOD_NAME = "getWeatherbyCityName "; private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName "; private String weatherToday; private SoapObject detail; public void getWeather(String cityName) { try { System.out.println("rpc------ "); SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME); System.out.println("rpc " + rpc); System.out.println("cityName is " + cityName); rpc.addProperty("theCityName ", cityName); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = rpc; envelope.dotNet = true ; envelope.setOutputSoapObject(rpc); HttpTransportSE ht = new HttpTransportSE(URL); //AndroidHttpTransport ht = new AndroidHttpTransport(URL); ht.debug = true ; ht.call(SOAP_ACTION, envelope); //ht.call(null, envelope); //SoapObject result = (SoapObject)envelope.bodyIn; //detail = (SoapObject) result.getProperty("getWeatherbyCityNameResult"); detail =(SoapObject) envelope.getResponse(); //System.out.println("result" + result); System.out.println("detail " + detail); Toast.makeText(this , detail.toString(), Toast.LENGTH_LONG).show(); parseWeather(detail); return ; } catch (Exception e) { e.printStackTrace(); } } private void parseWeather(SoapObject detail) throws UnsupportedEncodingException { String date = detail.getProperty(6).toString(); weatherToday = "今天: " + date.split(" ")[0]; weatherToday = weatherToday + "/n天气: " + date.split(" ")[1]; weatherToday = weatherToday + "/n气温: " + detail.getProperty(5).toString(); weatherToday = weatherToday + "/n风力: " + detail.getProperty(7).toString() + "/n "; System.out.println("weatherToday is " + weatherToday); Toast.makeText(this , weatherToday, Toast.LENGTH_LONG).show(); } }
参考资料
在Android中访问WebService接口
http://www.cnblogs.com/yy-7years/archive/2011/01/24/1943286.html
Android调用WebService
http://express.ruanko.com/ruanko-express_34/technologyexchange5.html
中国气象局的WebService地址
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
Android与服务器端数据交互(基于SOAP协议整合android+webservice)
http://www.cnblogs.com/zhangdongzi/archive/2011/04/19/2020688.html
发表评论
-
android离线
2019-11-04 21:25 258https://www.jianshu.com/p/fdfc4 ... -
android 异步更新
2015-07-11 22:42 1463http://www.apkbus.com/forum.php ... -
仿微米
2015-06-26 10:22 0http://www.javaapk.com/source/4 ... -
仿微信
2015-06-26 10:21 1872http://www.javaapk.com/source/1 ... -
网易客户端
2015-06-26 10:20 1561http://www.javaapk.com/source/4 ... -
仿朋友圈
2015-06-26 10:18 1664http://www.javaapk.com/source/8 ... -
仿朋友圈
2015-06-26 10:13 1777http://www.eoeandroid.com/threa ... -
全国ABC查询
2015-06-26 10:07 1272IM 功能 环信云 信息统计 Umeng 分享Umeng 更新 ... -
android 判断网络
2015-06-25 16:00 1220http://www.cnblogs.com/renqingp ... -
android 多彩表格
2015-05-31 16:06 1431http://blog.csdn.net/conowen/ar ... -
android socket
2015-05-31 16:01 1593http://blog.csdn.net/conowen/ar ... -
微信播放语音3
2015-02-25 12:00 1392http://download.csdn.net/detail ... -
微信语音播放2
2015-02-25 11:57 1296http://download.csdn.net/detail ... -
微信语音播放
2015-02-25 11:56 1643http://www.apkbus.com/android-1 ... -
超强的资料整合
2015-01-05 11:04 1195http://zz563143188.iteye.com/bl ... -
最强开发资源平台大合集
2015-01-04 14:50 1851程序员代码应用开发平 ... -
Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
2014-09-04 15:45 1334http://blog.csdn.net/vipzjyno1/ ... -
android应用推广
2014-09-03 23:25 1279应用推广不必愁,有米 ... -
android 图片异步加载
2014-09-03 16:47 1096http://www.csdn.net/article/201 ... -
android hander的使用
2014-09-02 23:46 1322http://www.cnblogs.com/xiaoran1 ...
相关推荐
调用WebServices流程,详情http://blog.csdn.net/zimo2013/article/details/38037989和http://blog.csdn.net/zimo2013/article/details/38036289
android 调用webservices 实例,可运行
Web Services 教程Web Services 教程Web Services 教程Web Services 教程
android WebServices 电话号码归属地查询
博客对接地址 http://blog.csdn.net/niceyoo/article/details/53401778
web services web services web services web services web services
Web ServicesWeb ServicesWeb Services
在java开发services中,会用到: 1.webservices-api.jar 2.webservices-extra.jar 3.webservices-rt.jar 4.webservices-tools.jar 5.webservices-extra-api.jar 此压缩文件里就是这五个jar文件。
WEB SERVICES原理与研发实践
android wsdl 实现webServices
Exchange Web Services 2.2
WebServices服务端和客户端DEMO。服务端和客户端的相关DEMO
android中Services使用
android访问webservices详细例子 供大家参考学习
android实现webservices实例以及讲解
常用WebServices返回数据的4种方法比较方法。内有详细介绍。
调用天气预报Web Services的一个实例
本书包括以下内容: ·强调Web基础技术的力量 —— HTTP应用协议、URI命名标准与XML标记语言 ·介绍面向资源的架构(ROA),设计RESTful Web Services的常识规则集合 ·揭示RESTful的设计如何比远程过程调用(RPC)...
本书的内容涵盖了Web Services的各种关键技术、Web Services的整体体系架构和应用体系架构,以及Web Services应用的设计和开发。本书以Web Services技术系列为主线,逐一详细分析解释包括Web Services的各种核心技术...
Oracle Web Services Manager_ Securing your Web Services