Java 通过ksoap2来自web服务的部分xml响应

Java 通过ksoap2来自web服务的部分xml响应,java,android,ksoap2,Java,Android,Ksoap2,我对Android和Java都是新手(以前用C#开发),对此我非常绝望。我正在使用ksoap2联系.NETWeb服务以获取xml数据。我的代码很简单,如果xml很小,它就可以正常工作: soapEnvelope.setOutputSoapObject(request); SoapPrimitive response = (SoapPrimitive) soapEnvelope.getResponse(); String xmlResponse = response.toString(); 这是

我对Android和Java都是新手(以前用C#开发),对此我非常绝望。我正在使用ksoap2联系.NETWeb服务以获取xml数据。我的代码很简单,如果xml很小,它就可以正常工作:

soapEnvelope.setOutputSoapObject(request);
SoapPrimitive response = (SoapPrimitive) soapEnvelope.getResponse();
String xmlResponse = response.toString();

这是获取响应的简单方法,响应是一个简单的xml字符串。但是当xml很大时,它会被截断,我想这是因为响应保存在内存中。我读到一些其他人有这个问题,但我没有找到一个真正帮助我的解决方案;也许我错过了处理这个问题的必要知识,这一点得到了证实,在Eclipse上导航变量时,我发现数据完全在那里,我只是不知道如何到达它。。。有人能帮我吗?我怎样才能得到响应中缺少的部分?我需要在本地保存响应吗?需要循环输入流吗?请提供帮助…

在调试器windows中,Eclipse不会显示所有数组元素。如果在展开阵列时能够看到所有这些,那么它们都在那里供程序使用

如果您怀疑响应很大,SAX是正确的解析方法

编辑:
正如Manfred解释的那样,
response.toString()
是一个坏主意,因为KSoap已经完成了解析。

您应该使用信封的getResponse方法,解析SoapObject树以获取所需信息。使用bodyIn并使用SAX解析将添加第二个解析。。如果您这样做,您最好不要使用ksoap2。

当您说“数据已完全存在*,它在哪里?”在Eclipse上调试时,在BodyIn->SoapPrimitive->value中导航变量“soapEnvelope”,我看到数据被截断,但在“value”属性上进行更多探索时,有一个向量数组,如[0-99999]其中每个单元格包含响应的一个字节;这个字节的最后一个字节是完整响应的最后一个字节,我不知道如何,呃,“到达”(抱歉,英语不好)…Eclipse在debugger视图中截断数据。它仍然在那里供您的程序访问。也许您可以打印xmlResponse字符串以确保自己的安全。我仍然必须使用sax解析xmlResponse-您是说我会在那里找到所有数据吗?我现在无法检查它,但如果您说的是真的,我会让您知道并给您一个提示”解决了的“标记……这是个坏主意,因为KSoap已经为您解析了它,并且基本上已经解析了两次。@Manfred我想您是指我对SAX解析的评论吧?我可能不该写它。我的核心答案是OP的问题,当Eclipse在摘要视图中显示部分结果时,如何访问数据,但当扩展时,它显示所有内容;答案是程序不需要做更多的事情。正确。在这个阶段,它已经被解析为SoapObjects。。如果您执行toString并解析它,您只需解析两次..很有趣,事实上,我将在response.toString()之后解析响应;但是xml代表一个复杂的对象,所以我需要用xml中的值填充它——那么我该怎么做呢?更具体地说,我如何迭代soapobjects中的节点和元素?你能发布一个例子吗?ksoap2 android项目的维基上有很多关于这些内容的文档。在那里阅读,顺便说一句。我是项目负责人,我们也有一个邮件列表。非常感谢,非常有用的信息。我会活着给你们两个竖起大拇指,但我仍然不能。。。无论如何谢谢你。。。