Я искал часами и не могу найти свою ошибку, на самом деле это вообще не имеет никакого смысла.
У меня есть приложение для Android, в котором есть класс, отвечающий за анализ XML-документа с помощью XmlPullParser. Результатом является список школьных дней, содержащий некоторую информацию о дне, а также список уроков на каждый день. Я могу правильно извлечь всю эту информацию, но по какой-то причине у меня в итоге получается один и тот же список уроков на каждый день (хотя другая информация «заголовка» этого элемента остается верной). Полный метод можно найти здесь (слишком длинный, чтобы вставлять его сюда): http://pastebin.com/AwxqwxQb
Я просто размещаю здесь схему:
List<SubstitutionDay> parseReturnSubstitution() {
SubstitutionDay currentSubstitutionDay = new SubstitutionDay();
List<SubstitutionDay> results = new ArrayList<>();
Substitution currentSubstitution = new Substitution();
List<Substitution> currentSubstitutionList = new ArrayList<>();
int multipleClasses = 0, multiplePeriods = 0;
String text = "";
try {
// all the XmlPullParser set up
int eventType = xmlPullParser.getEventType();
while (eventType != END_DOCUMENT) {
String tag;
String[] tempStringArray;
tag = xmlPullParser.getName();
switch (eventType) {
case TEXT:
text = xmlPullParser.getText();
break;
case START_TAG:
switch (tag) {
case "kopf":
// reset the school day
currentSubstitutionDay = new SubstitutionDay();
break;
case "haupt":
// empty the list before new elements are added
currentSubstitutionList.clear();
break;
case "aktion":
// reset values for each new substitution
currentSubstitution = new Substitution();
multipleClasses = 0;
multiplePeriods = 0;
break;
}
break;
case END_TAG:
switch (tag) {
// iterate over xml elements that contain header information about the day
// iterate over the individual lessons
case "klasse":
break;
case "stunde":
break;
case "lehrer":
break;
case "raum":
break;
case "info":
break;
case "aktion":
break;
case "haupt":
// add the list of lessons to the day
// the number of lessons is correct here
currentSubstitutionDay.setSubstitutionList(currentSubstitutionList);
// add the whole day to the result set
// number of lessons is still correct
results.add(currentSubstitutionDay);
break;
}
break;
}
eventType = xmlPullParser.next();
}
} // catch statements follow here
// when I check for the size of results.get(i).getSubstitutionList().size() the size is the same for all elements
return results;
}
Я здесь действительно беспомощен, потому что этого вообще не должно происходить. Есть ли у кого-нибудь этому объяснение? Любая помощь приветствуется. Если потребуется дополнительная информация, просто дайте мне знать!
Изменить: проанализированный XML-файл можно найти здесь: http://vplankl.gymnasium-beetzendorf.de/Vertretungsplan_Klassen.xml
Ожидаемые результаты - это в основном количество строк из каждой таблицы. Однако, если одна строка предназначена, скажем, для двух периодов (имя столбца: Stunde) (например, 4-5), результат увеличивается на один, потому что я сохраняю каждую замену / урок в одном элементе списка. Количество уроков за последний день - 5 - это число, которое копируется во все остальные дни.