Я создаю небольшое приложение для чтения в новостной ленте BBC f1 в Android и для отображения в ListView
. Я создал следующие функции синтаксического анализа, следуя этому Android Developer Tutorial.Парсер Android XML только извлекает первый элемент из фида
Когда items ArrayList
возвращается к деятельности, он имеет только один элемент, самую последнюю новость. Когда я регистрирую
Эти функции вызывается после успешного извлечения данных через асинхронный вызов. На второй до последней строке выходной заголовок совпадает с возвращенным элементом массива.
Я отправил вывод LogCat на Pastebin here
RSS Структура
<rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
// unrequired tags (title, description, lang etc)
<item>
<title></title>
<description></description>
<link></link>
<guid isPermaLink="false"></guid>
<pubDate></pubDate>
<media:thumbnail />
<media:thumbnail />
</item>
<item>
<title></title>
<description></description>
<link></link>
<guid isPermaLink="false"></guid>
<pubDate></pubDate>
<media:thumbnail />
<media:thumbnail />
</item>
</channel>
</rss>
функция подачи чтения
private static ArrayList<BBCItem> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
//Log.d("read feed", "");
ArrayList<BBCItem> items = new ArrayList();
parser.require(XmlPullParser.START_TAG, ns, "rss");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
// Starts by looking for the channel tag
if (name.equals("channel")) {
// navigate to the item tag here
parser.require(XmlPullParser.START_TAG, ns, "channel");
while (parser.next() != XmlPullParser.END_TAG){
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
name = parser.getName();
if (name.equals("item")){
items.add(bbcReadEntry(parser));
}
else {
skip(parser);
}
}
} else {
skip(parser);
}
}
return items;
}
предмет чтения индивидуальной подачи
public static BBCItem bbcReadEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "item");
String title = null;
String description = null;
String url = null;
String pubDate = null;
String thumbnailURL = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("title")) {
title = readString(parser, "title");
} else if (name.equals("description")) {
description = readString(parser, "description");
} else if (name.equals("link")) {
url = readString(parser, "link");
} else if (name.equals("pubDate")) {
pubDate = readString(parser, "pubDate");
} else if (name.equals("media:thumbnail")) {
//thumbnailURL = readThumbnail(parser);
thumbnailURL = "http://news.bbcimg.co.uk/media/images/81615000/jpg/_81615988_nicorosberg.jpg";
}
else {
skip(parser);
}
}
Log.d("News item title", title);
return new BBCItem(title, description, url, pubDate, thumbnailURL);
}
Любая помощь очень ценится
Благодаря