在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() {
@Override
public 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 中使用KSOAP2调用WebService
WebService 是一种基于SOAP协议的远程调用标准.通过WebService可以将不同操作系统平台,不同语言.不同技术整合到一起.在Android SDK中并没有提供调用WebService的 ...
- Android使用KSOAP2调用WebService及正确导入jar包的问题(转)
Android使用KSOAP2调用WebService及正确导入jar包的问题(转) 错误信息 最近在学Android使用KSOAP2调用现有的Webservice的方法,期间在网上找了很多代 ...
- Xamarin.Android中使用android:onClick="xxx"属性
原文:Xamarin.Android中使用android:onClick="xxx"属性 在原生Android开发中,为一个View增加点击事件,有三种方式: 1.使用匿名对象 ( ...
- Android中Dialog对话框的调用及监听
Android中经常会需要在Android界面上弹出一些对话框提示用户,比如App的退出的时候都会有各种框来挽留你的心,支付宝的时候输入密码的密码框,非常常见及其实用的功能,类似于JS中的alter, ...
- 我的Android进阶之旅------>关于调用Webservice查询火车票时刻表的几个接口介绍
今天发现一个可以提供火车票时刻表查询的WebService,先记录下来以后如果写一个火车票时刻表查询的Android App的话就用的着.首先该WebService的的名字是TrainTimeWebS ...
- Android中利用AIDL机制调用远程服务
服务端: //CalculateInterface.aidl package com.itheima.aidl.calculate; interface CalculateInterface { do ...
- FineReport中以jws方式调用WebService数据源方案
在使用WebService作为项目的数据源时,希望报表中也是直接调用这个WebService数据源,而不是定义数据连接调用对应的数据库表,这样要怎么实现呢? 在程序中访问WebService应用服务, ...
- [转]Android中的android:layout_width和android:width
android:width 其实是定义控件上面的文本(TextView) 的宽度,当然这个宽度也是和 android:layout_width 配合起来作用的,如果 android:layout_ ...
- Android中的android:layout_width和android:width
最近在看android的东西,发现很多和web前台的东西一样(思想).只是看到很多属性的写法和前台有差别,刚刚看到这样的属性: android:width 其实是定义控件上面的文本(TextView) ...
随机推荐
- 理解Linux的进程,线程,PID,LWP,TID,TGID
在Linux的top和ps命令中,默认看到最多的是pid (process ID),也许你也能看到lwp (thread ID)和tgid (thread group ID for the threa ...
- BoneBlack am335x利用SD卡烧写板卡上的emmc
参考ti论坛上面的一篇文章: 链接:https://pan.baidu.com/s/1SLSUbCRrIULJJf_BNI3sEQ 密码: hvem 自己稍微修改的debrick.sh 链接: htt ...
- shell cut
使用说明cut 命令从文件的每一行剪切字节.字符和字段并将这些字节.字符和字段写至标准输出.如果不指定 File 参数,cut 命令将读取标准输入.必须指定 -b.-c 或 -f 标志之一. 主要参数 ...
- 数据准备<5>:变量筛选-实战篇
在上一篇文章<数据准备<4>:变量筛选-理论篇>中,我们介绍了变量筛选的三种方法:基于经验的方法.基于统计的方法和基于机器学习的方法,本文将介绍后两种方法在Python(skl ...
- 【状压dp】Petrozavodsk Winter Training Camp 2018 Day 1: Jagiellonian U Contest, Tuesday, January 30, 2018 Problem E. Guessing Game
题意:给你n个两两不同的零一串,Alice在其中选定一个,Bob去猜,每次询问某一位是0 or 1.问你最坏情况下最少要猜几次. f(22...2)表示当前状态的最小步数,2表示这位没确定,1表示确定 ...
- [BalticOI2002]Bicriterial routing
OJ题号: BZOJ1375.ECNU1468 题目大意: 给定一个无向连通图,每条边有两个权值w1和w2.定义一条路径是优秀的当且仅当没有别的路径满足两个权值的和都比该路径小,求s到t的优秀路径条数 ...
- alpha冲刺——代码规范、冲刺任务与计划(追光的人)
代码规范 代码规范整合了自身项目实践还有诸多好的大公司的代码规范.如阿里巴巴开发手册.华为Java规范.W3C前端规范等. 由于内容过于详细和细致,为了方便查看,将其放置在了showDoc网站上(同时 ...
- C#高级编程9-第7章 运算符和类型强制转换
运算符和类型强制转换 1.运算符 运算符的简化操作 条件运算符: if-else的简化操作,也称三元运算符.如果条件为真,返回一个值,为假返回另外一个值. condition?true_value:f ...
- Effective OC : 1-5
1,了解Objective-C语言的起源: OC为C语言的超集,为C加入了面向对象的特性. 要理解C中的指针和内存模型. 2.在类文件里尽量少引入其它头文件: 引入过多头文件.将借口暴露,添加耦合度. ...
- Chrome在win8显示“没有注册类”的解决办法
问题1:从任务栏和桌面快捷方式无法打开Chrome,显示错误为没有注册类问题2:无法从word等中点击打开url,无法打开html,htm方式的文件,同样显示错误为没有注册类出了这两个错误后,用起来相 ...