一、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相关推荐

  1. 多态在android中(利用接口调用服务中方法)的应用

    首先我们已经了解了java中多态的基本概念 1方法重载. 2向上转型,向下转型 今天我们主要讲向上转型在android中的应用范例. 在java中向上向下转型的图解: 重点:子类对象向上转型为父类对象 ...

  2. Android中的Android中的Surface和SurfaceView

    一.什么是Surface 简单的说Surface对应了一块屏幕缓冲区,每个window对应一个Surface,任何View都要画在Surface上.传统的view共享一块屏幕缓冲区,所有的绘制必须在U ...

  3. FineReport中以jws方式调用WebService数据源方案

    在使用WebService作为项目的数据源时,希望报表中也是直接调用这个WebService数据源,而不是定义数据连接调用对应的数据库表,这样要怎么实现呢? 在程序中访问WebService应用服务, ...

  4. java除了android,Java中是否有类似android中的android.os.Handler的类?

    没有一个默认.但是你可以让自己的自定义类来做类似的事情. 我做了一个这样的: import java.util.ArrayList; public class Handler extends Obje ...

  5. Android 中在Android studio2.3中 NASA 的World Wind地图应用

    World Wind的官方网站:链接 百度百科 World Wind(简称WW,中文民间直译为世界风),是NASA发布的一个开放源代码(Open Source)的地理科普软件(由NASA Resear ...

  6. java xfire指定参数名_Java编程中使用XFire框架调用WebService程序接口

    JAVA调用webservice,当你刚开始接触的时候你会觉得它是一个恶梦,特别是没有一个统一的标准实现,比起.net的那些几步就可以完成的webservice实现,我们看着JAVA的实现真是伤心啊. ...

  7. Android中的跨进程调用技术AIDL

    什么是AIDL Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信. 为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用 ...

  8. Android中Webview使用javascript调用事先定义好的Java函数

    1. 首先定义好一个类,专们用于给javascript调用 public class JavaScriptInterface {// share your newspublic void share( ...

  9. Android中的GridView反复调用getView和getCount,并且getView中的position的值几乎都是0

    最近做项目发现一个界面当用到GridView的时候,getView和getCount中的log被疯狂调用,并且getVIew中的LOG每出来一次就是四条,并且这四条数据的position的值都是0.一 ...

最新文章

  1. linux 跟阿铭学linux
  2. [MySQL] 几句MySQL时间筛选SQL语句[进入查看]
  3. 无边框对话框改变大小
  4. 使用strcat_s函数的注意事项
  5. Elasticsearch分页查询Fromamp;Size VS scroll
  6. 前端学习(2695):重读vue电商网站16之Upload 上传组件
  7. 工作67:el-table问题
  8. LeetCode 1533. Find the Index of the Large Integer(二分查找)
  9. linux mount命令衔接,Linux mount命令详解:挂载Linux系统外的文件
  10. .net mysql limit 分页原理_浅谈MySQL分页Limit的性能问题
  11. springboot指定属性返回_Spring Boot 最最最常用的注解梳理
  12. 科学计算机病毒代码大全,计算机病毒代码有哪些
  13. 黑龙江工程学院锐捷校园网连接路由器免认证
  14. 验证牛顿公式的局部收敛性,并找到对于牛顿公式不收敛(发散)的函数,比较二分法与牛顿公式的收敛速度
  15. LittleVGL移植到STM32
  16. APP分发是什么意思!为什么需要用到呢
  17. mysql按时间查询的优化_Mysql根据时间查询日期的优化技巧
  18. 计算器linux源码,强悍的C++程序实现计算器的linux源程序(国外英文资料).doc
  19. keil 生成三角波dac0832_怎么样利用南方CASS三角网法和方格网法进行土方量计算...
  20. java左手画圆右手画方_左手画圆,右手画方真的很难吗?为什么人们很难做到呢?...

热门文章

  1. keras和tensorflow使用 keras.callbacks.EarlyStopping 提前结束训练
  2. php微信级联菜单,php微信公众号开发之二级菜单
  3. mysql 忽略语法错误_MYSQL语句中易忽略的语法错误 | 学步园
  4. 宝塔mysql优化_宝塔面板下实现MySQL性能优化处理
  5. 宝塔服务器环境好不好_服务器环境怎么搭建?(宝塔环境搭建教程)
  6. php读取cookie文件,PHP读取CURL模拟登录时生成Cookie文件的方法,_PHP教程
  7. sketch如何做设计稿交互_交互设计师是做什么的——交互设计的历史、现状和未来...
  8. java原子变量的作用_AtomicInteger原子类的作用介绍(代码示例)
  9. java里写分页,自己写的Java分页类
  10. iis5.1配置php5.3.1详解,WinXP IIS 5.1 PHP 5.3 VC9.0 配置详解