ArrayIndexOutOfBoundsException в Android's KXmlParser

Я делаю регулярный анализ XML на Android, и очень редко я получаю это исключение и только на определенных телефонах. Не удалось добраться до корня этой проблемы. У кого-нибудь есть идея, что может быть причиной этого?

    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 ответа

У меня есть похожее исключение. В моем случае, xml был загружен и сохранен на SD. Когда я открыл файл, я увидел, что он как бы вырезал "середину предложения". Похоже, произошла ошибка при загрузке файла. Удаление файла и повторная загрузка исправили проблему в этом случае, но, чтобы предотвратить будущие проблемы того же типа, я проверяю ArrayIndexOutOfBoundsException при чтении XML и предполагаю, что файл поврежден, когда он его перехватывает.

Очевидно, что это просто бандитское решение неопределенно определенной проблемы на данный момент. Если я узнаю больше, я обновлю свой ответ.

Нижний уровень (kxml) некорректно генерирует непроверенное исключение, когда он сталкивается с плохим xml. Чтобы обойти это, при использовании XmlPullParser замените

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

с

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

Я нашел исправление для Android 4.4, в котором упоминалось следующее: Изменить 61530

Таким образом, правильное исключение, которое вы должны получить: Неопределенная спецификация содержимого элемента, означающая неожиданный EOF.

Другие вопросы по тегам