2019独角兽企业重金招聘Python工程师标准>>>

android端解析WebService我采用的是ksoap来完成的。ksoap相对来说也是比较简单的。代码如下

package com.lv.test;import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;import java.util.Map;public class WebServiceUtil {private Boolean _isdotnet = false;/** 设置当前WebServices是否支持 .net 的WebServices;* @param dotNetWebService:  .net默认true;java默认是false*/public WebServiceUtil setIsDotNet(boolean dotNetWebService) {_isdotnet = dotNetWebService;return this;}private int _setHttpTimeOut = 10 * 1000;/** 设置HTTP请求的时间,单位:秒;* @param secondTime: 默认 10 s*/public WebServiceUtil setHttpTimeOut(int secondTime) {_setHttpTimeOut = secondTime;return this;}private boolean _isdebug = false;/** 设置启用HTTP的Debug模式* @param isdebug: 默认 false*/public WebServiceUtil setIsDebug(boolean isdebug) {_isdebug = isdebug;return this;}/** 获取WebService数据,并以字符形式返回。* @param Url: WebService服务地址 (http://webservice.***.com.cn/WeatherWS.asmx)* @param NameSpace: WebService的服务的命名空间,可以WSDL数据中找到 (http://***.com.cn/)* @param MethodName: WebService的调用函数方法名称(getDataMethod)* @param Maps: 请求服务需要提交的数据集* @Return: 服务以字符类型返回请求数据* @Exception: 写入控制台日志*/public String getString(String Url, String NameSpace, String MethodName, Map<String, ?> RequestDatas) {return getString(Url, NameSpace, MethodName, RequestDatas, null, null);}/** 获取WebService数据,并以字符形式返回。* @param Url: WebService服务地址 (http://webservice.***.com.cn/WeatherWS.asmx)* @param NameSpace: WebService的服务的命名空间,可以WSDL数据中找到 (http://***.com.cn/)* @param MethodName: WebService的调用函数方法名称(getDataMethod)* @param Maps: 请求服务需要提交的数据集* @Return: 服务以字符类型返回请求数据* @Exception: 写入控制台日志*/public String getString(String Url, String NameSpace, String MethodName) {return getString(Url, NameSpace, MethodName, null, null, null);}/** 获取WebService数据,并以字符形式返回。* @param Url: WebService服务地址 (http://webservice.***.com.cn/WeatherWS.asmx)* @param NameSpace: WebService的服务的命名空间,可以WSDL数据中找到 (http://***.com.cn/)* @param MethodName: WebService的调用函数方法名称(getDataMethod)* @param Maps: 请求服务需要提交的数据集* @param SoapHeadeName: 设置WebService的HTTP头名称* @param SoapHeadeValues: 设置 SoapHeade 的数据集* @Return: 服务以字符类型返回请求数据* @Exception: 写入控制台日志*/public String getString(String Url, String NameSpace, String MethodName, Map<String, ?> RequestDatas, String SoapHeadeName, Map<String, ?> SoapHeadeValues) {SoapObject soap = getObject(Url, NameSpace, MethodName, RequestDatas, SoapHeadeName, SoapHeadeValues);if (soap != null && soap.getPropertyCount() > 0) {String getResultString = soap.getProperty(0).toString();return getResultString;}return null;}/** 获取WebService数据,返回SoapObject对象。* @param Url: WebService服务地址 (http://webservice.***.com.cn/WeatherWS.asmx)* @param NameSpace: WebService的服务的命名空间,可以WSDL数据中找到 (http://***.com.cn/)* @param MethodName: WebService的调用函数方法名称(getDataMethod)* @param Maps: 请求服务需要提交的数据集* @Return: 服务返回SoapObject对象* @Exception: 写入控制台日志*/public SoapObject getObject(String Url, String NameSpace, String MethodName, Map<String, Object> RequestDatas) {return getObject(Url, NameSpace, MethodName, RequestDatas, null, null);}/** 获取WebService数据,返回SoapObject对象。* @param Url: WebService服务地址 (http://webservice.***.com.cn/WeatherWS.asmx)* @param NameSpace: WebService的服务的命名空间,可以WSDL数据中找到 (http://***.com.cn/)* @param MethodName: WebService的调用函数方法名称(getDataMethod)* @param Maps: 请求服务需要提交的数据集* @param SoapHeadeName: 设置WebService的HTTP头名称* @param SoapHeadeValues: 设置 SoapHeade 的数据集* @Return: 服务返回SoapObject对象* @Exception: 写入控制台日志*/public SoapObject getObject(String Url, String NameSpace, String MethodName, Map<String, ?> RequestDatas, String SoapHeadeName, Map<String, ?> SoapHeadeValues) {try {SoapObject soap = new SoapObject(NameSpace, MethodName);// 设置WebService提交的数据集if (RequestDatas != null && !RequestDatas.isEmpty()) {for (Map.Entry<String, ?> entry : RequestDatas.entrySet()) {soap.addProperty(entry.getKey(), entry.getValue());}}// 设置HTTP头信息Element[] header = null;if (SoapHeadeName != null && SoapHeadeValues != null && !SoapHeadeValues.isEmpty()) {header = new Element[1];header[0] = new Element().createElement(NameSpace, SoapHeadeName);for (Map.Entry<String, ?> entry : SoapHeadeValues.entrySet()) {Element element = new Element().createElement(NameSpace, entry.getKey());element.addChild(Node.TEXT, entry.getValue());header[0].addChild(Node.ELEMENT, element);}}// 初始化数据请求SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.dotNet = _isdotnet;if (header != null) envelope.headerOut = header;envelope.bodyOut = soap;envelope.setOutputSoapObject(soap);// 发起Web请求HttpTransportSE http = new HttpTransportSE(Url, _setHttpTimeOut);http.debug = _isdebug;http.call(NameSpace + MethodName, envelope);// 获取Web请求结果, 数据需要从 result.getProperty(0) 获取SoapObject result = (SoapObject) envelope.bodyIn;return result;} catch (Exception e) {e.getMessage();}return null;}}

第一个坑:

SoapSerializationEnvelope 在设置dotNet的时候要注意

/** 设置当前WebServices是否支持 .net 的WebServices;* @param dotNetWebService:  .net默认true;java默认是false*/

文章中也有提到

第二个坑:

就是传递参数。在工具类中我们也看到了我把参数写成了Map集合然后来完成填充。但是问题就出现在这里,我如果使用ArrayMap或者HashMap的话,有部分值传递到后台会丢失,所以参数的Map需要是LinkedHashMap最好

回调部分就没写了,有兴趣的朋友可以自己进一步封装

转载于:https://my.oschina.net/u/1269023/blog/688566

《android 解析WebService》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. springboot过滤字段_SpringBoot自定义过滤器的两种方式及过滤器执行顺序
  2. 多角度认识markdown
  3. 铺铜过孔不要十字_谈谈商周青铜器上圈足的镂孔现象
  4. 【渝粤题库】国家开放大学2021春2312旅行社经营管理题目
  5. 2017安徽二级c语言,2017计算机二级C语言测试题及答案
  6. 云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据
  7. flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者之间关系分析
  8. Java远程连接进程
  9. ios 从assets加载图片_iOS 使用Assets.xcassets添加启动图和Icon
  10. 计算机学习路线推荐(初稿)
  11. Vue2.0进阶组件篇2 解析饿了么(spinner组件)
  12. TinyPNG 智能PNG和JPEG图片压缩
  13. win10 office2007,excel2007,word2007等每次打开都要配置进度
  14. xp重启计算机的快捷键,重启电脑的快捷键是什么?
  15. 互联网公司常用的黑话,你中招了多少?
  16. 面试一个应届生,从不起眼到令人刮目相看
  17. 多变量微分方程组带事件控制的ODE45函数写法
  18. 小米发明“永动机”:走路即可为智能设备充电
  19. Android去除默认提示音
  20. 治具 ,手顺 是外来词,他们的含义

热门文章

  1. Python可视化工具Matplotlib 3.0版出炉,改进默认后端选择,饼图终于变圆了
  2. Uber无人车安全员之困:这是一份机械、枯燥、影响心理的工作
  3. Portainer容器管理软件,安装
  4. react-native 异常处理 Execution failed for task ':app:mergeDebugResources'.
  5. iOS-国家代码选择功能github开源分享
  6. 能源项目xml文件标签释义--DefaultAdvisorAutoProxyCreator
  7. 使用reflux进行react组件之间的通信
  8. 织梦(Dedecms)V5.6 远程文件删除漏洞
  9. Lotus Sametime Server R8.x 标准版部署排错
  10. 说明书 Cisco wrv210