在Android中使用Android Ksoap2调用WebService
一、WebService介绍 |
WebService是基于SOAP协议可实现web服务器与web服务器之间的通信,因采用SOAP协议传送XML数据具有平台无关性,也是成为解决异构平台之间通信的重要解决方案,比如Java平台与.net平台之间。因此在web应用中有着举足轻重的作用,很多机构、组织都在各自平台上对外发布了WebService(例如:天气预报、航班信息、股市行情等等),这样任何平台和客户都可以享受到这些服务,当然有些是要付费的。
二、Android ksoap2组件 |
对于Android端调用WebService,有两种方式,一种自己编写代码主要通过URL获得 HttpUrlConnection的方式建立与webservice的连接,然后进行I/O读写传送和获得数据,并对获得数据进行XML解析,比较麻烦。另一种就是使用第三方组件,比较常用的就是ksoap2-android。
ksoap2-android这个开源组件针对Android平台提供了一个轻量级和高效的SOAP类库,可方便实现Android端与WebService之间的通信
1、环境搭建
ksoap2-android项目的地址:http://code.google.com/p/ksoap2-android/ 大家可以下载最新版本jar,然后将jar加入到项目中即可。
我这里使用是ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar
2、Ksoap2 使用的主要步骤
1)web服务参数准备
// webservice服务地址 String url= “http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx”;//web服务的命名空间 String namespace=” http://WebXml.com.cn/”;//请求服务的方法名称 String methodName=”getMobileCodeInfo”;//soap请求地址 String soapActionAddress = "http://WebXml.com.cn/getMobileCodeInfo";
2)创建HttpTransportSE,该组件可发送请求
HttpTransportSE transport = new HttpTransportSE(url);
3)创建SoapObject,添加要传送的数据(信息载体)
SoapObject soapObject = new SoapObject(namespace,methodName);soapObject.addProperty(name,value);//添加数据 …
4)创建SoapSerializationEnvelope对象,指定xml版本,以及request中body
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut = soapObject;envelope.setOutputSoapObject(soapObject);
5)发送请求,调用webserivce中的方法
httpTransportSE.call(soapActionAddress, envelope);//服务传回的信息,会放在envelope的bodyIn属性中
6) 获取服务传回的数据
SoapObject object = (SoapObject) envelope.bodyIn;
三、实现案例——通过调用webservice查询手机号码的归属地 |
执行效果如下:
完整代码实现:
public class MainActivity extends Activity {///手机归属地Webservice的参数信息private static final String nameSpaceAddress = "http://WebXml.com.cn/"; private static final String urlAddress= "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";private static final String methodNameAddress = "getMobileCodeInfo";private static final String soapActionAddress = "http://WebXml.com.cn/getMobileCodeInfo";private TextView telAddress = null;private EditText tel = null;private Button btnAddress = null; protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnAddress = (Button) this.findViewById(R.id.btnSearchAddress);telAddress = (TextView) this.findViewById(R.id.telAddress);tel = (EditText) this.findViewById(R.id.telNo);btnAddress.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(new Runnable() {public void run() {getTelAddress();}}).start();}}); /** * 请求WebService并获得返回的手机号码归属地信息 */ public void getTelAddress() {SoapObject soapObject = new SoapObject(nameSpaceAddress, methodNameAddress);//创建SOAP对象//设置属性,这些属性值通过SOAP协议传送给服务器soapObject.addProperty("mobileCode", tel.getText().toString());//要查询的电话号码soapObject.addProperty("userId", ""); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut = soapObject;envelope.dotNet = true; envelope.setOutputSoapObject(soapObject);HttpTransportSE httpTransportSE = new HttpTransportSE(urlAddress);try {//调用服务 httpTransportSE.call(soapActionAddress, envelope);} catch (Exception e) {e.printStackTrace();}//获取服务传回的数据,手机归属地信息SoapObject object = (SoapObject) envelope.bodyIn;txtAddress = object.getProperty(0).toString();//向主线程发送消息成功,getTelAddress函数执行完毕handlerAddress.sendEmptyMessage(0);}Handler handlerAddress = new Handler() {public void handleMessage(Message msg) {telAddress.setText(txtAddress);Toast.makeText(MainActivity.this, "获取号码归属地成功"+txtAddress, Toast.LENGTH_LONG).show();}}; }
四、附:常见的WebService服务URL |
手机归属地服务
http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx
天气预报Web服务,数据来源于中国气象局
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
IP地址来:
http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx
中文 <-> 英文双向翻译 WEB 服务:
http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx
火车时刻表
http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx
航班查询服务
http://webservice.webxml.com.cn/webservices/DomesticAirline.asmx
中国股票行情数据 WEB 服务
http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx
中国电视节目预告
http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx
出处:http://www.cnblogs.com/jerehedu/
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
在Android中使用Android Ksoap2调用WebService相关推荐
- 多态在android中(利用接口调用服务中方法)的应用
首先我们已经了解了java中多态的基本概念 1方法重载. 2向上转型,向下转型 今天我们主要讲向上转型在android中的应用范例. 在java中向上向下转型的图解: 重点:子类对象向上转型为父类对象 ...
- Android中的Android中的Surface和SurfaceView
一.什么是Surface 简单的说Surface对应了一块屏幕缓冲区,每个window对应一个Surface,任何View都要画在Surface上.传统的view共享一块屏幕缓冲区,所有的绘制必须在U ...
- FineReport中以jws方式调用WebService数据源方案
在使用WebService作为项目的数据源时,希望报表中也是直接调用这个WebService数据源,而不是定义数据连接调用对应的数据库表,这样要怎么实现呢? 在程序中访问WebService应用服务, ...
- java除了android,Java中是否有类似android中的android.os.Handler的类?
没有一个默认.但是你可以让自己的自定义类来做类似的事情. 我做了一个这样的: import java.util.ArrayList; public class Handler extends Obje ...
- Android 中在Android studio2.3中 NASA 的World Wind地图应用
World Wind的官方网站:链接 百度百科 World Wind(简称WW,中文民间直译为世界风),是NASA发布的一个开放源代码(Open Source)的地理科普软件(由NASA Resear ...
- java xfire指定参数名_Java编程中使用XFire框架调用WebService程序接口
JAVA调用webservice,当你刚开始接触的时候你会觉得它是一个恶梦,特别是没有一个统一的标准实现,比起.net的那些几步就可以完成的webservice实现,我们看着JAVA的实现真是伤心啊. ...
- Android中的跨进程调用技术AIDL
什么是AIDL Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信. 为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用 ...
- Android中Webview使用javascript调用事先定义好的Java函数
1. 首先定义好一个类,专们用于给javascript调用 public class JavaScriptInterface {// share your newspublic void share( ...
- Android中的GridView反复调用getView和getCount,并且getView中的position的值几乎都是0
最近做项目发现一个界面当用到GridView的时候,getView和getCount中的log被疯狂调用,并且getVIew中的LOG每出来一次就是四条,并且这四条数据的position的值都是0.一 ...
最新文章
- linux 跟阿铭学linux
- [MySQL] 几句MySQL时间筛选SQL语句[进入查看]
- 无边框对话框改变大小
- 使用strcat_s函数的注意事项
- Elasticsearch分页查询Fromamp;Size VS scroll
- 前端学习(2695):重读vue电商网站16之Upload 上传组件
- 工作67:el-table问题
- LeetCode 1533. Find the Index of the Large Integer(二分查找)
- linux mount命令衔接,Linux mount命令详解:挂载Linux系统外的文件
- .net mysql limit 分页原理_浅谈MySQL分页Limit的性能问题
- springboot指定属性返回_Spring Boot 最最最常用的注解梳理
- 科学计算机病毒代码大全,计算机病毒代码有哪些
- 黑龙江工程学院锐捷校园网连接路由器免认证
- 验证牛顿公式的局部收敛性,并找到对于牛顿公式不收敛(发散)的函数,比较二分法与牛顿公式的收敛速度
- LittleVGL移植到STM32
- APP分发是什么意思!为什么需要用到呢
- mysql按时间查询的优化_Mysql根据时间查询日期的优化技巧
- 计算器linux源码,强悍的C++程序实现计算器的linux源程序(国外英文资料).doc
- keil 生成三角波dac0832_怎么样利用南方CASS三角网法和方格网法进行土方量计算...
- java左手画圆右手画方_左手画圆,右手画方真的很难吗?为什么人们很难做到呢?...
热门文章
- keras和tensorflow使用 keras.callbacks.EarlyStopping 提前结束训练
- php微信级联菜单,php微信公众号开发之二级菜单
- mysql 忽略语法错误_MYSQL语句中易忽略的语法错误 | 学步园
- 宝塔mysql优化_宝塔面板下实现MySQL性能优化处理
- 宝塔服务器环境好不好_服务器环境怎么搭建?(宝塔环境搭建教程)
- php读取cookie文件,PHP读取CURL模拟登录时生成Cookie文件的方法,_PHP教程
- sketch如何做设计稿交互_交互设计师是做什么的——交互设计的历史、现状和未来...
- java原子变量的作用_AtomicInteger原子类的作用介绍(代码示例)
- java里写分页,自己写的Java分页类
- iis5.1配置php5.3.1详解,WinXP IIS 5.1 PHP 5.3 VC9.0 配置详解