Я пытаюсь разобрать XML-документ и вернуть один объект с именем System. Вместо этого для каждого конечного тега в документе XML и возвращается новая система. Я попытался переместиться туда, где я создаю Систему, в разные части кода, но либо объект System будет только нулями, либо будет ошибка, связанная с возвратом. Вот исходный код, прежде чем я попытался пошевелиться, где я создал систему:XmlPullParser возвращает слишком много объектов
private System readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
//TODO Make it return one system per time through, not multiple after every end tag
parser.require(XmlPullParser.START_TAG, ns, null);
String systemName = null;
String rightAscension = null;
String declination = null;
String distance = null;
while (parser.getEventType() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
Log.i("String", "Start Tag Added");
continue;
}
String name = parser.getName();
if (name.equalsIgnoreCase("name")) {
Log.i("Name:", "Name added to parser");
systemName = readName(parser);
} else if (name.equalsIgnoreCase("rightascension")) {
Log.i("RAscen:", "Right Ascension added to parser");
rightAscension = readRightAscension(parser);
} else if (name.equalsIgnoreCase("declination")) {
Log.i("Dec:", "Declination added to parser");
declination = readDeclination(parser);
} else if (name.equalsIgnoreCase("distance")) {
Log.i("Distance:", "Distance added to parser");
distance = readDistance(parser);
} else {
Log.i("Skip: ", "String Skipped");
skip(parser);
}
}
Log.i("Parser", "New System Added to be displayed");
return new System(systemName, rightAscension, declination, distance);
}
Как изменить код так, чтобы в конце кода только одна система возвращается? Спасибо! Вот мой код, где вызывается readSystem:
public List<System> parse(InputStream is) throws XmlPullParserException, IOException {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
Log.i("Parser", "Parser created");
try {
//factory = XmlPullParserFactory.newInstance();
// factory.setNamespaceAware(true);
// parser = factory.newPullParser();
parser.setInput(is, null);
parser.nextTag();
Log.i("System:", "readSystem called");
return readSystem(parser);
} finally {
is.close();
Log.i("InputStream", "InputStream Closed");
}
}
private List readSystem(XmlPullParser parser) throws XmlPullParserException, IOException {
List systems = new ArrayList();
parser.require(XmlPullParser.START_TAG, ns, "system");
Log.i("Parser", "Passed parser.require");
String name = parser.getName();
Log.i("parser", "getName() Called");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
Log.i("readSystem", "Start Tag Continue called");
continue;
}
if (name.equalsIgnoreCase("system")) {
Log.i("String", "System added to parser");
systems.add(readEntry(parser));
} else {
Log.i("String", "No system to add, skipped, no readEntry called");
skip(parser);
}
}
return systems;
}
добавить все те, к классу список и после системы и код, с которого вы звоните 'readEntry'. – Raghunandan
Я добавил код, класс System - это просто getters и seters и оператор toString() return. – user3000089