После нескольких часов поиска и отладки я все еще застрял в одном месте, и Eclipse не помогает мне.Застрял с XmlPullParser в Android
Я пытаюсь синтаксического анализа this rss feed
который довольно просто. Соединение выполнено, и я преобразовываю InputStream как String, это хорошо работает.
Когда я пытаюсь проанализировать полученную строку, у меня нет ошибок или предупреждений, но значения, которые я пытаюсь получить, равны нулю. Вот XML-процесс
public class XmlOperations {
private static final String ns = null;
public List parse(String in) throws XmlPullParserException, IOException {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(new StringReader(in));
parser.nextTag();
return readFeed(parser);
} finally {
//
}
}
private List readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
List entries = new ArrayList();
// first xml balise
parser.require(XmlPullParser.START_TAG, ns,"rss");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
Log.w(TAG, name); // output channel the first time
// Starts by looking for the item tag
if (name.equals("item")) {
**Log.w(TAG, "Never get in here")**
entries.add(readEntry(parser));
} else {
skip(parser);
Log.w(TAG, "lala");
}
}
return entries;
}
// Parses the contents of an item. If it encounters a title, description, or link tag, hands them off
// to their respective "read" methods for processing. Otherwise, skips the tag.
private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "item");
String title = null;
String description = null;
String link = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("title")) {
title = readTitle(parser);
} else if (name.equals("description")) {
description = readDescription(parser);
} else if (name.equals("link")) {
link = readLink(parser);
} else {
skip(parser);
}
}
return new Entry(title, description, link);
}
// Processes title tags in the feed.
private String readTitle(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "title");
String title = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "title");
return title;
}
// Processes link tags in the feed.
private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "link");
String link = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "link");
return link;
}
// Processes summary tags in the feed.
private String readDescription(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "description");
String description = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "description");
//Log.d("vALUE = ", summary);
return description;
}
// For the tags title and description, extracts their text values.
private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
String result = "";
if (parser.next() == XmlPullParser.TEXT) {
result = parser.getText();
parser.nextTag();
}
return result;
}
private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
if (parser.getEventType() != XmlPullParser.START_TAG) {
throw new IllegalStateException();
}
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
}
Я полагаю, что ошибка заключается в одном из методов анализа.
В antoher классе у меня есть этот
XmlOperations xml = new XmlOperations();
try {
entrieses = xml.parse(result);
String lol = null;
for(Entry item : entrieses) {
//Toast.makeText(getApplicationContext(), item.title, Toast.LENGTH_SHORT).show();
lol = item.link.toString();
}
tv.setText("Pin " + lol + " gouin");
entreses является Список Входа. И все равно нулевой :(
EDIT: С лог кошки у меня есть канал Лала и все
Можете ли вы показать образец вывода? Также может быть хорошей идеей процитировать некоторые текущие данные rss-фида, если он уйдет или изменится. – itsbruce
В LogCat отсутствуют ошибки или предупреждение. Вывод Textview имеет значение Pin null gouin – Freego
Можно ли попытаться установить контрольную точку, чтобы проверить, добавляет ли ваш 'entries.add 'анализируемые элементы? Или вы можете просто добавить некоторый logcat out, чтобы регистрировать то, что делает парсер. – dumbfingers