android的KXmlParser中的ArrayIndexOutOfBoundsException

时间:2012-08-15 09:38:53

标签: android xmlpullparser kxml2

我正在Android上进行常规的XML解析,而且我很少得到这个例外而且只在特定的手机上。未能找到这个问题的根源。有没有人知道可能导致这种情况的原因是什么?

    java.lang.ArrayIndexOutOfBoundsException: src.length=8192 srcPos=1 dst.length=8192 dstPos=0 length=-1
    at java.lang.System.arraycopy(Native Method)
    at org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1489)
    at org.kxml2.io.KXmlParser.skip(KXmlParser.java:1574)
    at org.kxml2.io.KXmlParser.parseStartTag(KXmlParser.java:1049)
    at org.kxml2.io.KXmlParser.next(KXmlParser.java:369)
    at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)

3 个答案:

答案 0 :(得分:1)

我有类似的例外。在我的例子中,xml已经下载并保存到SD。当我打开文件时,我看到它切掉了“中间句子”,就像它一样。看起来下载文件时出错了。删除文件并重新下载修复了此实例中的问题,但为了防止将来出现相同类型的问题,我在读取xml时检查ArrayIndexOutOfBoundsException,并假设文件在捕获时损坏了。

这显然只是目前模糊定义的问题的一种解决方案。如果我想出更多,我会更新我的答案。

答案 1 :(得分:0)

我发现Android 4.4的错误修复提到了这个:Change 61530

因此,您应该获得的正确例外是:未终止的元素内容规范,这意味着意外的EOF。

答案 2 :(得分:0)

下层(kxml)在遇到错误的xml时错误地抛出了未经检查的异常。要解决此问题,请在使用XmlPullParser时替换

try {
    // use XmlPullParser
}
catch (XmlPullParserException ex) { ... }

try {
    // use XmlPullParser
}
catch (Exception ex) { ... }