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

  1. 利用TinyXML读取VOC2012数据集的XML标注文件裁剪出所有人体目标保存为文件

    转载自:利用TinyXML读取VOC2012数据集的XML标注文件裁剪出所有人体目标保存为文件 - Why So Serious? - 博客频道 - CSDN.NET  http://blog.csd ...

  2. WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单

    现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了这样的业务要求,需要在.net开发的客户端系统中访问java开发的web系统,这样的业务需求自然需要通过WebService ...

  3. [转] WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单

    以下文章来自   http://www.blogjava.net/jacally/articles/186655.html 现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了 ...

  4. Android读书笔记(六) OkHttp(GET、POST)、解析XML(Pull、SAX)

    1.OkHttp的使用   使用OkHttp需要添加库到app/build.gradle文件中,如下: dependencies {compile 'com.squareup.okhttp3:okht ...

  5. Android屏幕录制并传输,Android录制屏幕的实现方法

    *原文:Paul Kinlan 翻译:Agora.io* 长久以来,我一直希望能够直接从Android屏幕上进行录制并将其编码为多种格式,以便将录制内容嵌入在任意位置,而不需要安装任何软件. 如今,我 ...

  6. Android解析xml文件获取数据练习

    前几天单词app中,已经可以显示单词了,对比有道词典的单词表,主要是有单词备注的功能,可以进行联想记忆,而且程序占用空间小,没有太多的通知信息. 以前使用有道词典的单词保存了一些单词,有道里的单词可以 ...

  7. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. Android解析xml的方法,Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

  9. php 如何利用 soap调用.Net的WebService asmx文件

    原文:php 如何利用 soap调用.Net的WebService asmx文件 最近,帮一个同行测试用.net写的WebService接口,C#调用通过,现在需要测试一下php版本对它的调用,经过各 ...

最新文章

  1. 倒计时3天!携手开发者,一起精准打造数智未来!
  2. Pycharm怎么改背景颜色(超详细)
  3. 引用计数器法 可达性分析算法_面试官:你说你熟悉jvm?那你讲一下并发的可达性分析...
  4. 面部识别 vs 情绪状态,你还能守住自己的秘密吗?
  5. python爬取京东商品属性_python爬虫小项目:爬取京东商品信息
  6. Linux dnssec原理,什么是DNSSEC?DNSSEC的概念及作用
  7. 服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!
  8. DBeaver初次使用教程(强大的数据库连接工具)
  9. jms与ActivityMQ中的简单使用
  10. 完成例如12345转换为中文大写1万两千三百四十五
  11. Java架构师成长路线总结2021版(持续更新)
  12. Activity及其生命周期
  13. 电脑软件单击打开切换为双击打开
  14. jeecms系统使用介绍——jeecms中的内容、栏目、模型之间的关系
  15. 1879: Intersection
  16. 【UE4_C++】 4 Actor和Component
  17. SCM:新一代存储介质技术
  18. C语言——判断两个数组中是否有相同的元素
  19. python学习 day5 (3月6日)
  20. 质量管理-----解决问题A3报告写法

热门文章

  1. GBase 8c数据类型-二进制类型
  2. 分布式计算框架与分布式文件系统
  3. 数字化孪生技术在打造智慧工地上的应用
  4. 使用天气预报api接口
  5. 堰流实验报告思考题_流体实验报告 堰流流量系数测定实验
  6. 百度核心团队招募云计算产品经理
  7. 零基础学习Linux必会的60个常用命令
  8. <<大话数据结构>>之完结感言
  9. android编译出来的内核是dtb,内核编译出现错误,求大神教
  10. xp系统开机自检很久_xp系统每次开机都自检开不了机怎么解决