今天写了一个判断记录重复的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() 出现的问题的更多相关文章

  1. C#获取存储过程返回值和输出参数值的方法

    //转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...

  2. Python从线程获取函数返回值

    Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...

  3. EF中执行存储过程,获取output返回值

    EF不能直接支持执行存储过程,于是使用转化成执行SQL语句的形式,却怎么也获取不到output的值,折腾的好久,终于解决了,分享下曲折的经历: public int AddVote(int title ...

  4. PHP获取函数返回值的引用

    通过在函数前添加&可以获取函数返回值的引用,如:function &test(){return 10;}

  5. android两种方式获取AsyncTask返回值

    获取AsyncTask返回值,在Activity中使用. 引用链接:https://www.oschina.net/code/snippet_725438_49858#72630 [1].[代码] [ ...

  6. asp 获取url 返回值 和 对json 返回值的处理

    Function GetHttpPage(HttpUrl,endoce) If endoce = "" Then endoce = "GB2312" If Is ...

  7. java 反射获取方法返回值类型

    //ProceedingJoinPoint pjp //获取方法返回值类型 Object[] args = pjp.getArgs(); Class<?>[] paramsCls = ne ...

  8. 用jquery的ajax方法获取return返回值的正确姿势

    如果jquery中,想要获取ajax的return返回值,必须注意两方面,ajax的同步异步问题,在ajax方法里面还是外面进行return返回值. 下面列举了三种写法,如果想成功获取到返回值,参考第 ...

  9. Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页及获取JS返回值

    前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但是网页的DOM元素内容却可以动态的变化.如果处理这种网页是还用requests库或者 ...

随机推荐

  1. ZooKeeper3.4.6配置

    添加环境变量 #ZooKeeper VARIABLES START export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6 export PATH=$PATH ...

  2. JDBC建立/关闭数据库连接

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  3. leetcode 349:两个数组的交集I

    Problem: Given two arrays, write a function to compute their intersection. 中文:已知两个数组,写一个函数来计算它们的交集 E ...

  4. 【Flex教程】#009 As/typeof /instanceof /is的作用

    “as” :主要用它做类型转化 假设有一个类叫做Class1,我们声明了一个它的对象 c1,如果想要将它转换成Class2类型,只要这样写: Class2(c1); AS3 中的操作符: as 实现就 ...

  5. 无法定位程序输入点ucrtbase.

    转:http://tieba.baidu.com/p/3848709732 后的解决方法是需要安装VC 2015 Redistributable,请自己选择相应的版本.百度云盘共享地址:http:// ...

  6. pip的安装及使用

    pip 是“A tool for installing and managing Python packages.”,即pip是python的软件安装工具安装:方法一:(亲自使用)1.去官网下载get ...

  7. noip2008 火柴棒等式

    P1149 火柴棒等式 1.9K通过 3.7K提交 题目提供者该用户不存在 标签搜索/枚举模拟2008NOIp提高组 难度普及- 提交该题 讨论 题解 记录   题目描述 给你n根火柴棍,你可以拼出多 ...

  8. Some regret....

    今天是一个败笔,早上10点才起床,下午又不专心看书,晚上把还是不能静下来...... 把所有的时间都花在了那一篇FlowVisor上了,但是却没有任何收获,居然没看懂,等下好好整理一下逻辑. 明天开始 ...

  9. myecplise 添加svn插件

    myecplise svn插件下载地址 http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 1.SVN下载地址 ...

  10. 嵌入在C++程序中的extern "C"

    1.extern的作用 extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,可以告知编译器,用extern声明的函数和变量可以在本模块或其它模块中使用. 通常,在模块的头文件中 ...