android soap webservice 数据流传输,Android利用Soap读取WebService并且解析XML的DataSet数据...
一、Soap的结构
调用webService需要以下几个参数:命名空间、Soap Action、WSDL的URL、方法名。接下来以调用火车列车信息数据为例,webService地址为:webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx?op=getDetailInfoByTrainCode
二、调用WebService
一般来说,调用webService通常需要几个步骤,在调用之前,我们需要下载Soap的jar包,网上有很多,不再赘述。
1、参数设置:上面说到的几个参数都要先设置,这主要依赖于你要调用的web'Service的网址:
// 命名空间
String nameSpace = "http://WebXml.com.cn/";
// 调用的方法名称
String methodName = "getDetailInfoByTrainCode";
// EndPoint
String endPoint = "http//webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx";
// SOAP Action
String soapAction = "http//WebXml.com.cn/getDetailInfoByTrainCode";
// 命名空间
String nameSpace = "http://WebXml.com.cn/";
// 调用的方法名称
String methodName = "getDetailInfoByTrainCode";
// EndPoint
String endPoint = "http//webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx";
// SOAP Action
String soapAction = "http//WebXml.com.cn/getDetailInfoByTrainCode";
2、指定命名空间与调用方法名
// 指定WebService的命名空间和调用的方法名
SoapObject rpc = newSoapObject(nameSpace, methodName);
// 指定WebService的命名空间和调用的方法名
SoapObject rpc = new SoapObject(nameSpace, methodName);
3、设置参数:
// 设置需调用WebService接口需要传入的两个参数TrainCode、userId
rpc.addProperty("TrainCode", params[0]);
rpc.addProperty("UserID","");
// 设置需调用WebService接口需要传入的两个参数TrainCode、userId
rpc.addProperty("TrainCode", params[0]);
rpc.addProperty("UserID","");
4、生成调用WebService方法的SOAP请求信息
// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = newSoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.bodyOut = rpc;
// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.bodyOut = rpc;
5、是否允许调用.Net的WebService
// 设置是否调用的是dotNet开发的WebService
envelope.dotNet = true;
// 等价于envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc);
// 设置是否调用的是dotNet开发的WebService
envelope.dotNet = true;
// 等价于envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc);
6、创建Http对象
HttpTransportSE transport =newHttpTransportSE(endPoint);
HttpTransportSE transport = new HttpTransportSE(endPoint);
7、调用WebService方法
try{
// 调用WebService
transport.call(soapAction, envelope);
} catch(Exception e) {
e.printStackTrace();
}
try {
// 调用WebService
transport.call(soapAction, envelope);
} catch (Exception e) {
e.printStackTrace();
}
8、返回SoapObject对象
SoapObject object=null;
// 获取返回的数据
if(envelope.bodyIninstanceofSoapFault){
String str=((SoapFault)envelope.bodyIn).faultstring;
System.out.println("2"+str);
}
else{
object = (SoapObject) envelope.bodyIn;
}
SoapObject object=null;
// 获取返回的数据
if(envelope.bodyIn instanceof SoapFault){
String str=((SoapFault)envelope.bodyIn).faultstring;
System.out.println("2"+str);
}
else{
object = (SoapObject) envelope.bodyIn;
}
三、解析WebService中的DataSet数据
由于列车时刻表是DataSet数据,所以我们必须对返回的结果进行解析,在网上查找方法后,自己琢磨终于成功解析,方法如下:
SoapObject soap1=(SoapObject)object.getProperty("getDetailInfoByTrainCodeResult");
SoapObject childs=(SoapObject)soap1.getProperty(1);
SoapObject soap2=(SoapObject)childs.getProperty(0);
///
for(inti=0;i
SoapObject soap3=(SoapObject)soap2.getProperty(i);
///
Info info=newInfo();
info.setStation(soap3.getProperty(0).toString());
info.setArriveTime(soap3.getProperty(1).toString());
info.setStartTime(soap3.getProperty(2).toString());
info.setKm(soap3.getProperty(3).toString());
Raininfo.add(info);
//result=soap3.getProperty(3).toString();
}
SoapObject soap1=(SoapObject)object.getProperty("getDetailInfoByTrainCodeResult");
SoapObject childs=(SoapObject)soap1.getProperty(1);
SoapObject soap2=(SoapObject)childs.getProperty(0);
///
for(int i=0;i
SoapObject soap3=(SoapObject)soap2.getProperty(i);
///
Info info=new Info();
info.setStation(soap3.getProperty(0).toString());
info.setArriveTime(soap3.getProperty(1).toString());
info.setStartTime(soap3.getProperty(2).toString());
info.setKm(soap3.getProperty(3).toString());
Raininfo.add(info);
//result=soap3.getProperty(3).toString();
}
我自己定义了一个Info的model类,用来存放我读取的火车时刻数据,这么多getProperty方法,有可能会看着头晕,接下来接一下xml的截图说明,相信大家一看就会:
PS:如果数据不是DataSet的话,不用这么麻烦,直接就可以利用正则表达式进行解析。
android soap webservice 数据流传输,Android利用Soap读取WebService并且解析XML的DataSet数据...相关推荐
- 利用TinyXML读取VOC2012数据集的XML标注文件裁剪出所有人体目标保存为文件
转载自:利用TinyXML读取VOC2012数据集的XML标注文件裁剪出所有人体目标保存为文件 - Why So Serious? - 博客频道 - CSDN.NET http://blog.csd ...
- WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单
现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了这样的业务要求,需要在.net开发的客户端系统中访问java开发的web系统,这样的业务需求自然需要通过WebService ...
- [转] WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单
以下文章来自 http://www.blogjava.net/jacally/articles/186655.html 现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了 ...
- Android读书笔记(六) OkHttp(GET、POST)、解析XML(Pull、SAX)
1.OkHttp的使用 使用OkHttp需要添加库到app/build.gradle文件中,如下: dependencies {compile 'com.squareup.okhttp3:okht ...
- Android屏幕录制并传输,Android录制屏幕的实现方法
*原文:Paul Kinlan 翻译:Agora.io* 长久以来,我一直希望能够直接从Android屏幕上进行录制并将其编码为多种格式,以便将录制内容嵌入在任意位置,而不需要安装任何软件. 如今,我 ...
- Android解析xml文件获取数据练习
前几天单词app中,已经可以显示单词了,对比有道词典的单词表,主要是有单词备注的功能,可以进行联想记忆,而且程序占用空间小,没有太多的通知信息. 以前使用有道词典的单词保存了一些单词,有道里的单词可以 ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android解析xml的方法,Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
- php 如何利用 soap调用.Net的WebService asmx文件
原文:php 如何利用 soap调用.Net的WebService asmx文件 最近,帮一个同行测试用.net写的WebService接口,C#调用通过,现在需要测试一下php版本对它的调用,经过各 ...
最新文章
- 倒计时3天!携手开发者,一起精准打造数智未来!
- Pycharm怎么改背景颜色(超详细)
- 引用计数器法 可达性分析算法_面试官:你说你熟悉jvm?那你讲一下并发的可达性分析...
- 面部识别 vs 情绪状态,你还能守住自己的秘密吗?
- python爬取京东商品属性_python爬虫小项目:爬取京东商品信息
- Linux dnssec原理,什么是DNSSEC?DNSSEC的概念及作用
- 服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!
- DBeaver初次使用教程(强大的数据库连接工具)
- jms与ActivityMQ中的简单使用
- 完成例如12345转换为中文大写1万两千三百四十五
- Java架构师成长路线总结2021版(持续更新)
- Activity及其生命周期
- 电脑软件单击打开切换为双击打开
- jeecms系统使用介绍——jeecms中的内容、栏目、模型之间的关系
- 1879: Intersection
- 【UE4_C++】 4 Actor和Component
- SCM:新一代存储介质技术
- C语言——判断两个数组中是否有相同的元素
- python学习 day5 (3月6日)
- 质量管理-----解决问题A3报告写法