Ksoap2 获取webservice返回值的getResponse() 出现的问题
今天写了一个判断记录重复的webservcie 返回布尔类型
// 判断序列号在数据库是否重复
public static boolean isSerialNumExist(String serialNumber)
throws IOException, XmlPullParserException {
boolean isExist = false;
String methodName = "IsSerialNumberExist"; // 方法名
HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); //SERVICE_URL为 webservice的地址
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER12);
SoapObject soap = new SoapObject(SERVICE_NS, methodName);
// 传入参数
soap.addProperty("serialNumber", serialNumber);
envelope.bodyOut = soap;
// 设置webservice的提供者为.net平台的
envelope.dotNet = true;
ht.call(SERVICE_NS + methodName, envelope);
// SoapObject in = (SoapObject) envelope.getResponse();
String response=envelope.getResponse().toString(); //值为: false
SoapObject in = (SoapObject) envelope.bodyIn;
// String bodyIn=in.toString();
// 值为:IsSerialNumberExistResponse{IsSerialNumberExistResult=false; }
if (in != null) {
isExist = Boolean.valueOf(in.getProperty(methodName + "Result")
.toString());
}
return isExist;
}
一、SoapSerializationEnvelope携带输出参数与返回值:
(1)其属性bodyIn为SoapObject类型 内容格式为 methodName+Response{ methodName+Result=值;... } (要是返回的是字符串数组:
methodName+Response{ methodName+Result=anyType{stirng=value1;string=value2;...} })
获取指定属性的值:
SoapObject in = (SoapObject) envelope.bodyIn;
in.getProperty(methodName+Result).toString();
(2)而我通过 getResponse()获取的返回值直接就是false (要是返回值是字符串数数组 其格式为: anyType{ string=value1; stirng=value2;...} )不能转换成SoapObject类型,此时貌似getResponse()就是什么soapprimitive类型了; 数组的话可以转换;
所以在使用的时候要么try catch 要么直接用bodyIn 就不会出错的样子,如下:
SoapObject result=null;
try{
result = (SoapObject) soapEnvelope.getResponse(); }
catch (ClassCastException e) {
result = (SoapObject)soapEnvelope.bodyIn;
}
二、不过还一个问题是: 这两种获取返回值的方式会有所不同,具体体现为 result.getProperty(String name) 传入的参数差异
返回单个值:
getResponse():
object response=envelope.getResponse(); bodyIn:
object in=in.getProperty(methodName + "Result");
返回字符串数组:
getResponse:
if (soapIn != null)
{
int count = soapIn.getPropertyCount(); // 属性个数
for (int i = ; i < count; i++)
{
soapIn.getProperty(i).toString(); // do as you like
}
} bodyIn:
if (soapIn != null)
{
SoapArray soapArray=soapIn.getProperty(methodName+"Result"); // 差异
int count = soapArray.getPropertyCount(); // 属性个数
for (int i = ; i < count; i++)
{
soapArray.getProperty(i).toString()
}
}
Ksoap2 获取webservice返回值的getResponse() 出现的问题的更多相关文章
- C#获取存储过程返回值和输出参数值的方法
//转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...
- Python从线程获取函数返回值
Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...
- EF中执行存储过程,获取output返回值
EF不能直接支持执行存储过程,于是使用转化成执行SQL语句的形式,却怎么也获取不到output的值,折腾的好久,终于解决了,分享下曲折的经历: public int AddVote(int title ...
- PHP获取函数返回值的引用
通过在函数前添加&可以获取函数返回值的引用,如:function &test(){return 10;}
- android两种方式获取AsyncTask返回值
获取AsyncTask返回值,在Activity中使用. 引用链接:https://www.oschina.net/code/snippet_725438_49858#72630 [1].[代码] [ ...
- asp 获取url 返回值 和 对json 返回值的处理
Function GetHttpPage(HttpUrl,endoce) If endoce = "" Then endoce = "GB2312" If Is ...
- java 反射获取方法返回值类型
//ProceedingJoinPoint pjp //获取方法返回值类型 Object[] args = pjp.getArgs(); Class<?>[] paramsCls = ne ...
- 用jquery的ajax方法获取return返回值的正确姿势
如果jquery中,想要获取ajax的return返回值,必须注意两方面,ajax的同步异步问题,在ajax方法里面还是外面进行return返回值. 下面列举了三种写法,如果想成功获取到返回值,参考第 ...
- Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页及获取JS返回值
前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但是网页的DOM元素内容却可以动态的变化.如果处理这种网页是还用requests库或者 ...
随机推荐
- 【LOB】使用USER_LOBS视图获得当前用户包含LOB字段的表
包含LOB类型字段的表往往需要特殊关照,如何快速的获得包含LOB对象的数据库表?使用DBA_LOBS.ALL_LOBS和USER_LOBS视图可以很方便地获得包含BLOB或CLOB字段的表. 简单看一 ...
- VirtualBox 使用
安装: # pacman -S virtualbox 配置: 使用时加载vboxdrv模块:#modprobe vboxdrv (或者设置开机加载:1.建立文件“/etc/modules-load.d ...
- OC基础(9)
OC中的私有方法 @property基本概念 @synthesize基本概念 @property增强 @property修饰符 *:first-child { margin-top: 0 !impor ...
- cocos2d-lua 3.5 android搭建常见错误
新建一个项目,就不说了,就是用命令行 cocos new HelloLua -p com.wwj.hellolua -l lua -d ~/Cocos2dxProj ,生成下 然后把项目导入eclip ...
- Gradle用户指南(章8:依赖关系管理基础)
章8:依赖关系管理基础 本章将介绍一些gradle依赖关系管理的基础 什么是依赖关系管理? 简略的说,依赖管理是由两部分组成的.首先,gradle需要知道你要构建或者运行的项目,以便找到它们.我们将这 ...
- socket 和 SocketServer 模块
一 .Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket socket(TCP,IP)通常也称作"套接字",用于描述IP地址和端 ...
- Linux操作系统下三种配置环境变量的方法——转载
来源:赛迪网 作者:millio 现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法. 1.修改/e ...
- 洛谷P1613 跑路
P1613 跑路 176通过 539提交 题目提供者该用户不存在 标签倍增动态规划 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 这个题的数据.. 题意问题 表意 题目描述 小A的工作不仅繁 ...
- mongodb 文件,图片存储数据库
mongodb 文件,图片存储数据库
- FindResource函数错误代码:1813-找不到映像文件中指定的资源类型 与LoadResource函数错误代码:1812-指定的映像文件不包含资源区域
HRSRC WINAPI FindResource( _In_opt_ HMODULE hModule, _In_ LPCTSTR lpName, _In_ LPCTSTR lp ...