ArrayIndexOutOfBoundsException in android's KXmlParser
Asked Answered
B

3

7

I am doing regular XML parsing on android, and very rarely I get this exception and only on particular phones. Haven't been able to get to the root of this issue. Does anybody have an idea what might be causing this?

    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)
Bodily answered 15/8, 2012 at 9:38 Comment(0)
W
1

I have a similar exception. In my case, the xml had been downloaded and saved to the SD. When I opened the file, I saw that it cut out "mid-sentence", as it were. It looked like there had been an error in downloading the file. Deleting the file and re-downloading fixed the issue in this instance, but to prevent future issues of the same type, I check for ArrayIndexOutOfBoundsException when reading an xml, and assume the file is corrupt when it catches one.

It's obviously just a bandaid solution to a vaguely defined problem at the moment. If I figure more out, I'll update my answer.

Wineskin answered 21/9, 2012 at 2:4 Comment(0)
N
0

I found a bug-fix for Android 4.4 mentioning this: Change 61530

So the proper exception you should be getting is: Unterminated element content spec, meaning unexpected EOF.

Noxious answered 13/1, 2014 at 9:40 Comment(0)
C
0

The lower layer (kxml) is incorrectly throwing an unchecked Exception when it encounters bad xml. To workaround this, when using XmlPullParser, replace

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

with

try {
    // use XmlPullParser
}
catch (Exception ex) { ... }
Cameo answered 21/5, 2015 at 0:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.