android wsdl封装,《android 解析WebService》

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 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 RequestDatas, String SoapHeadeName, Map 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 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 RequestDatas, String SoapHeadeName, Map SoapHeadeValues) {

try {

SoapObject soap = new SoapObject(NameSpace, MethodName);

// 设置WebService提交的数据集

if (RequestDatas != null && !RequestDatas.isEmpty()) {

for (Map.Entry 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 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最好

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 638. 大礼包(无限背包DP)

1. 题目 在LeetCode商店中, 有许多在售的物品。 然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。 现给定每个物品的价格,每个大礼包包含物品的清单,以及待购物品清单。请输出确切完成待购清单的最低…

在2008 server安装vm server时发生的错误error1718、error1335……

;转载于:https://www.cnblogs.com/minglog/archive/2011/02/15/1955290.html

keepass2Android密码,Keepass2Android密码管理(快速解锁密码)

Keepass2Android密码管理能帮助我们保存各类网站、应用的密码,大家提前设置好之后每次输入密码的时候只需要输入很少的字符就能快速解锁密码,为大家的日常使用提供方便。软件特色* 几乎可与所有的Android 的浏览器结合使用 (见下文)*快速解锁&#xff1a…

LeetCode 845. 数组中的最长山脉(中心扩展)

1. 题目 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”&#xff1a; B.length > 3存在 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i1] > ... > B[B.length - 1] &#xff08;注意&#xff1a;B 可以是 A 的…

hibernate3.6.0日志配置

hibernate3 自带的默认的日志框架是slf4j&#xff0c;hibernate3的slf只是一个日志的接口&#xff0c;而hibernate3 自带默认的日志框架&#xff0c;在实际开发中很少有公司或者是项目中用到&#xff0c;这里记录一种使用log4j的日志框架来代替slf4j日志框架的实现&#xff0c;…

android stackview,Android StackView 使用示例

cell.xml 布局文件&#xff1a;xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/cellImage"android:layout_width"200dp"android:layout_height"200dp"/>主布局文件&#xff1a;android:id"id/activ…

LeetCode 1239. 串联字符串的最大长度(回溯/动态规划)

文章目录1. 题目2. 解题2.1 回溯超时解2.2 回溯优化2.3 动态规划1. 题目 给定一个字符串数组 arr&#xff0c;字符串 s 是将 arr 某一子序列字符串连接所得的字符串&#xff0c;如果 s 中的每一个字符都只出现过一次&#xff0c;那么它就是一个可行解。 请返回所有可行解 s 中…

android 伪造gps位置,在Android中使用GPS的假位置

您正在开发一个将设置坐标(经度和纬度)的应用程序.它必须显示我的位置,因为我在那个坐标.它类似于位置欺骗者.. http://www.androidzoom.com/android_applications/tools/location-spoofer_gkmc.html但我没有这样做..这是我的代码..请任何人帮助我.public class Mock extends M…

LeetCode 395. 至少有K个重复字符的最长子串(分治)

1. 题目 找到给定字符串&#xff08;由小写字符组成&#xff09;中的最长子串 T &#xff0c; 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。 示例 1: 输入: s "aaabb", k 3 输出: 3 最长子串为 "aaa" &#xff0c;其中 a 重复了 3 次。示…

WCF 体系结构图

转载于:https://www.cnblogs.com/agressivo/articles/1958858.html

android studio电影院选座,8排电影院选座最佳位置

8排电影院选座最佳位置在哪里呢&#xff1f;8排电影院属于小影厅&#xff0c;小影厅银幕宽度在10米以下&#xff0c;座位100以内&#xff0c;座位排数通常拥有8-14排&#xff0c;小影厅整体空间小&#xff0c;选座时要选中间稍靠后一些的位置。由于整体排数少&#xff0c;因此选…

LeetCode 1011. 在 D 天内送达包裹的能力(二分查找)

1. 题目 传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。 传送带上的第 i 个包裹的重量为 weights[i]。每一天&#xff0c;我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。 返回能在 D 天内将传送带上的所有包裹送达的船的…

仿Jquery链式操作的xml操作类

经常需要对xml文件进行操作&#xff0c;参考了Jquery的链式操作后实现了xmlHelper类。代码usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Xml;namespaceConfigUpdate{ ///<summary>///调用非静态的操作方法的 ///</summary>publiccla…

4月17日鸿蒙开发者大会,4月17日这天,将载入华为史册

文/笨鸟原创不易&#xff0c;禁止抄袭、洗稿&#xff0c;违者必究&#xff01;万众瞩目的华为鸿蒙系统对于国人来说&#xff0c;一部智能手机只有实现了芯片和系统技术的自主化&#xff0c;才能被称之为真正的国产手机。而就目前的国内手机市场而言&#xff0c;除华为之外的所有…

LeetCode 875. 爱吃香蕉的珂珂(二分查找)

1. 题目 珂珂喜欢吃香蕉。这里有 N 堆香蕉&#xff0c;第 i 堆中有 piles[i] 根香蕉。警卫已经离开了&#xff0c;将在 H 小时后回来。 珂珂可以决定她吃香蕉的速度 K &#xff08;单位&#xff1a;根/小时&#xff09;。每个小时&#xff0c;她将会选择一堆香蕉&#xff0c;…

MsSql正反表达式

例子&#xff1a; UPDATE [Photo_Table] SET istopistop^1,IsTopDateTimegetdate() WHERE charindex(, rtrim(PHOTOID) , , , PHOTOIDLIST ,)>0转载于:https://www.cnblogs.com/yibinboy/archive/2011/02/22/1961675.html

LeetCode 1455. 检查单词是否为句中其他单词的前缀

1. 题目 给你一个字符串 sentence 作为句子并指定检索词为 searchWord &#xff0c;其中句子由若干用 单个空格 分隔的单词组成。 请你检查检索词 searchWord 是否为句子 sentence 中任意单词的前缀。 如果 searchWord 是某一个单词的前缀&#xff0c;则返回句子 sentence 中…

html怎么修改锚点的属性,在HTML中设置自定义锚点

我已经在帖子here和here中看到了这个话题,但它们并没有真正帮助我.情况非常相似&#xff1a;页面顶部的滚动页面和粘性菜单栏(固定div),锚点分散在长滚动文本中.像这样的HTML&#xff1a;Heading Foothis is some text, and a lot of it...jump to Heading Foo...Heading Blaan…

PHP输出Excel实例代码

这里使用PHPExcel的开源类 一个完整的实例&#xff1a; <?php require_once("../includes/function.php"); //提供了SQL注入检测函数inject_check require_once("../class/DB.php"); //DB操作类&#xff0c;自己扩展一下 $db new DB(); if($_GET[sho…

LeetCode 1456. 定长子串中元音的最大数目(滑动窗口)

1. 题目 给你字符串 s 和整数 k 。 请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。 英文中的 元音字母 为&#xff08;a, e, i, o, u&#xff09;。 示例 1&#xff1a; 输入&#xff1a;s "abciiidef", k 3 输出&#xff1a;3 解释&a…