这很奇怪..
我有一个 DefaultHandler,它实际上可以很好地处理所有事情,但有时,没有明显的原因,它会给我 0 而不是正确的值。这种情况每次都在同一个地方发生,所以有问题,但我不知道是什么!
问题是这样的。我正在解析像“17:00:00”这样的时间。当解析器到达“奇怪时间”时,它会像这样解析它 -> “17:00:0”,再调用一次方法 characters(char[] ch, int start, int end),并解析最后一个“0”。
什么鬼?
实际上它会将结束设置为 7 而不是 8。这适用于除少数值之外的所有内容!
代码非常简单,它只是一个简单的 saxparser。这是字符方法:
public void characters(char[] ch, int start, int end) {
if(on_element)
value = new String(ch, start, end);
}
有什么提示吗?
最佳答案
characters
对于一对打开和关闭标记中的文本,可以多次调用该方法。
您的代码假设它只被调用一次,这对于小数据通常是正确的,但并非总是如此。
您需要在 startElement
中初始化一个缓冲区该标记的方法,收集到 characters
中的缓冲区中方法,并将缓冲区转换为 endElement
中的字符串.
我对 this question where the user was making the same mistake 的回答包含一些执行此操作的代码以更正用户发布的更完整的代码。阅读可能对您的代码有所帮助。
关于android - SAXParser 有时会返回一个错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11281491/