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.