Я пишу приложение для Android, которое должно анализировать данные из файла XML. Я никогда не сталкивался с такой ошибкой, которую так сложно отследить. Или, может быть, мой мозг просто перестал работать. Что происходит. XML-файл имеет форму:
<?xml version="1.0" encoding="iso-8859-1"?>
<memberRoster>
<agent>
<agentInfo1>...</agentInfo1>
<agentInfo2>...</agentInfo2>
...
</agent>
<agent>
...
</agent>
...
</memberRoster>
Пока все работает хорошо, за исключением некоторых случайных кусочков веселья!
Время от времени он генерирует исключение NullPointerException. Я еще немного покопался и обнаружил, что есть ТРИ «агента» (из 800) с «якобы» нулевыми данными. Я проверил файл XML, и есть ли там данные, нет никаких недопустимых символов и т. Д. Это одни и те же три «агента» каждый раз. Программа анализирует другие записи до и после этих «нулевых» «агентов». Также следует отметить, что не все поля «agentInfo» в ArrayList имеют значение null; Например, одна из записей имеет 7 из 8 записей как ноль, с восьмой ненулевой, другая имеет только один ноль с последними 7 ненулевыми.
Я анализирую данные в ArrayList из файла XML, и, как я упоминал ранее, он работает без сбоев, пока не дойдет до этих трех конкретных записей в файле XML.
Извините, я не могу дать гораздо больше информации, эти данные чувствительны к нашим членам.
EDIT:
Извини! Я знал, что я что-то забыл! :)
Некоторый код из моего класса XMLHandler.java:
public void characters(char[] ch, int start, int length)
</p>
<pre><code> if(this.in_mr_agentNrdsId) {
agent[0] = ch.toString();
}
else if(this.in_mr_agentFirstName) {
agent[1] = ch.toString();
}
else if(this.in_mr_agentLastName) {
agent[2] = ch.toString();
}
else if(this.in_mr_agentPhone) {
agent[3] = ch.toString();
}
else if(this.in_mr_agentEmail) {
agent[4] = ch.toString();
}
else if(this.in_mr_agentOfficeName) {
agent[5] = ch.toString();
}
else if(this.in_mr_agentOfficePhone) {
agent[6] = ch.toString();
}
else if(this.in_mr_agentType) {
agent[7] = ch.toString();
pds.setMemberRoster(agent);
agent = new String[8];
}
PDS - это объект типа ParsedDataSet, который представляет собой простой класс, содержащий объекты ArrayList и несколько методов получения и установки:
public class ParsedDataSet {
private ArrayList agentOpenHouses = new ArrayList();
private ArrayList calendarOfEvents = new ArrayList();
private ArrayList latestStatistics = new ArrayList();
private ArrayList memberRoster = new ArrayList();</p>
<pre><code>public ArrayList<String[]> getAgentOpenHouses() {
return agentOpenHouses;
}
public ArrayList<String[]> getCalendarOfEvents() {
return calendarOfEvents;
}
public ArrayList<String[]> getLatestStatistics() {
return latestStatistics;
}
public ArrayList<String[]> getMemberRoster() {
return memberRoster;
}
public void setAgentOpenHouses(String[] agentOpenHousesItem) {
this.agentOpenHouses.add(agentOpenHousesItem);
}
public void setCalendarOfEvents(String[] calendarOfEventsItem) {
this.calendarOfEvents.add(calendarOfEventsItem);
}
public void setLatestStatistics(String[] latestStatisticsItem) {
this.latestStatistics.add(latestStatisticsItem);
}
public void setMemberRoster(String[] memberRosterItem) {
this.memberRoster.add(memberRosterItem);
}
} // конец класса ParsedDataSet