#android #xmlpullparser
#Android #xmlpullparser — анализатор #xmlpullparser
Вопрос:
выходные данные моего проанализированного XML-файла в logcat показывают все элементы, но моя активность показывает только последний элемент.
Logcat:
06-16 22:06:19.780 9871-10111/notendop.norge I/System.out﹕ TIME: 23:00:00
06-16 22:06:19.780 9871-10111/notendop.norge I/System.out﹕ DATE: 2014-06-16
06-16 22:06:19.780 9871-10111/notendop.norge I/System.out﹕ regen VALUE 0
06-16 22:06:19.780 9871-10111/notendop.norge I/System.out﹕ wind richting Nord-nordøst
06-16 22:06:19.785 9871-10111/notendop.norge I/System.out﹕ wind Svak vind
06-16 22:06:19.785 9871-10111/notendop.norge I/System.out﹕ temp 12
06-16 22:06:19.785 9871-10111/notendop.norge I/System.out﹕ TIME: 00:00:00
06-16 22:06:19.785 9871-10111/notendop.norge I/System.out﹕ DATE: 2014-06-17
06-16 22:06:19.785 9871-10111/notendop.norge I/System.out﹕ regen VALUE 0
06-16 22:06:19.785 9871-10111/notendop.norge I/System.out﹕ wind richting Øst-nordøst
06-16 22:06:19.785 9871-10111/notendop.norge I/System.out﹕ wind Lett bris
(часть) Код:
private ArrayList<NewsItem> parseNews(InputStream in) throws XmlPullParserException, IOException {
ArrayList<NewsItem> newsList = new ArrayList<NewsItem>();
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser pullParser = factory.newPullParser();
pullParser.setInput(in, "UTF-8");
int eventType = pullParser.getEventType();
NewsItem item = null;
while (eventType != XmlPullParser.END_DOCUMENT) {String tagName;
if (eventType == XmlPullParser.START_TAG)
{tagName = pullParser.getName();
if (tagName.equals(TAG_TABULAR)) {item = new NewsItem();}
else if (tagName.equals(TAG_TIME)) {
if (item != null) {
item.mTime_SV = pullParser.getAttributeValue(null, "from");
StringTokenizer tokens = new StringTokenizer(item.mTime_SV, "T");
item.mDate = tokens.nextToken();
item.mTime = tokens.nextToken();
System.out.println("TIME: " item.mTime);
System.out.println("DATE: " item.mDate);
}
}
else if (tagName.equals(TAG_TEMP)) {
if (item != null) {
item.mTemp_SV = pullParser.getAttributeValue(null,"value");
System.out.println("temp " item.mTemp_SV);
}
}
else if (tagName.equals(TAG_REGEN_MIN)) {
if (item != null) {
item.mRegen_min_SV = pullParser.getAttributeValue(null,"value");
System.out.println("regen VALUE " item.mRegen_min_SV);
}
}
else if (tagName.equals(TAG_WIND_DESC)) {
if (item != null) {
item.mWind_desc_SV = pullParser.getAttributeValue(null,"name");
System.out.println("wind " item.mWind_desc_SV);
}
}
else if (tagName.equals(TAG_WIND_RICHTING)) {
if (item != null) {
item.mWind_richting_SV = pullParser.getAttributeValue(null,"name");
System.out.println("wind richting " item.mWind_richting_SV);
}
}
// eventType = pullParser.next();
}
else if (eventType == XmlPullParser.END_TAG) { tagName = pullParser.getName();
if (tagName.equals(TAG_TABULAR)) {
newsList.add(item);
item = null;
}
}
eventType = pullParser.next();
}
return newsList;
}
Я пропустил цикл или что-то еще?
Комментарии:
1. это ссылка на XML-файл: yr.no/sted/Norge/Sogn_og_Fjordane/Gloppen/Sandane/varsel.xml
Ответ №1:
ну, каждый раз, когда вы нажимаете на тег TAG_TABULAR
, вы делаете это
tagName.equals(TAG_TABULAR)) {item = new NewsItem();
так что все, что уже было в вашем списке, будет уничтожено.
возможно, вам следует лучше отформатировать свой код, и вы, возможно, заметили это
Комментарии:
1. ну, очевидно, что есть что-то другое между 2, если один работает. проверьте xml и дважды проверьте рабочий, но если какой-либо тег
TAG_TABULAR
появляется в xml более одного раза, ваш список будет уничтожен при следующем обнаружении этого тега