Я искал часы, и я не могу найти свою ошибку, на самом деле это не имеет никакого смысла.Список копирует себя во все элементы родительского списка
У меня есть приложение для 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;
}
Я действительно беспомощны прямо здесь, так как это не происходит вообще , У кого-нибудь есть объяснение? Любая помощь приветствуется. Если вам нужна дополнительная информация, просто дайте мне знать!
Edit: XML, который распознаётся можно найти здесь: http://vplankl.gymnasium-beetzendorf.de/Vertretungsplan_Klassen.xml
Результаты Я ожидаю, что в основном количество строк из каждой таблицы. Однако если для одной строки используется два периода (имя столбца: Stunde) (например, 4-5), результат увеличивается на единицу, потому что я храню каждую подстановку/урок в одном элементе списка. Число уроков за последний день равно 5 - это число, которое копируется на все остальные дни.
Я предлагаю вам использовать отладчик. Скорее всего, вы используете одну и ту же ссылку для всех списков, когда у вас должна быть отдельная ссылка для каждого из них. –
Какой класс предназначен для «школьных дней», а для «уроков»? –
Это то, что я делал последние два часа .. SubstitutionDay для школьных дней и содержит список заметок (уроков) – Crosswind