android wsdl封装,《android 解析WebService》

本文介绍了在Android端使用ksoap解析WebService的方法,给出了WebServiceUtil类的代码,包含设置WebService属性、获取数据等方法。同时指出两个使用中的坑,一是SoapSerializationEnvelope设置dotNet的注意事项,二是传递参数时最好用LinkedHashMap,避免部分值丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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最好

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值