请帮帮我! 我制作了一个简单的RSS阅读器。
如果Rss Feed在所有项目中都有图像,则XMLPullParcer正常工作。
但是如果图像不存在于所有项目中,那么在没有它们的情况下,parcer会从前一项目中获取它们并将其插入空白区域。
这也会导致SQLite数据库列中的重复条目。
解析器必须显示图像,只显示XML格式。并放入数据库URL或NULL。
我的parcer:
try {
dbResult = new DBRss(RssActivity.this);
ListMain listMain = (ListMain) getIntent().getSerializableExtra("ListData");
ListRss listRss = new ListRss();
URL url = new URL(listMain.getUrl());
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(getInputStream(url), null);
boolean insideItem = false;
int eventType = xmlPullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_TAG) {
Log.e(TAG, "Parse ==>" + xmlPullParser.getName());
if (xmlPullParser.getName().equalsIgnoreCase("item")) {
insideItem = true;
} else if (xmlPullParser.getName().equalsIgnoreCase("link")) {
if (insideItem) {
listRss.setLink(xmlPullParser.nextText());
}
} else if (xmlPullParser.getName().equalsIgnoreCase("title")) {
if (insideItem) {
listRss.setTitle(xmlPullParser.nextText());
}
} else if (xmlPullParser.getName().equalsIgnoreCase("pubDate")) {
if (insideItem) {
SimpleDateFormat fromFormat = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z", Locale.US);
SimpleDateFormat toFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm", Locale.US);
String input = xmlPullParser.nextText();
Date date = null;
try {
date = fromFormat.parse(input);
} catch (ParseException e) {
e.printStackTrace();
}
String format = toFormat.format(date);
listRss.setPubDate(format);
}
} else if (xmlPullParser.getName().equalsIgnoreCase("description")) {
if (insideItem) {
listRss.setDescription(xmlPullParser.nextText());
}
} else if (xmlPullParser.getName().equalsIgnoreCase("enclosure")) {
if (insideItem) {
listRss.setImage(xmlPullParser.getAttributeValue(xmlPullParser.getNamespace(), "url"));
}
else if (xmlPullParser.getName().equalsIgnoreCase("content")) {
for (int i = 0; i<xmlPullParser.getAttributeCount(); i++){
if (xmlPullParser.getAttributeName(i).contains("url"))
listRss.setImage(xmlPullParser.getAttributeValue(i));
}
}
}
} else if (eventType == XmlPullParser.END_TAG && xmlPullParser.getName().equalsIgnoreCase("item")) {
ListRss item = new ListRss(RssItemId, listMain.getUrl(), listRss.getPubDate(), listRss.getTitle(), listRss.getDescription(),
listRss.getLink(), listRss.getImage());
feedModels.add(item);
dbResult.insert(item);
insideItem = false;
}
eventType = xmlPullParser.next();
}
} catch (XmlPullParserException e) {
exception = e;
} catch (MalformedURLException e) {
exception = e;
} catch (IOException e) {
exception = e;
}
return exception;
}
}
答案 0 :(得分:0)
我在代码中发现了一个错误。一切正常。
...
if (xmlPullParser.getName().equalsIgnoreCase("item")) {
**listRss = new ListRss(RssItemId, null, null, null, null, null, null);**
insideItem = true;
...
feedModels.add(listRss);
ListRss item = new ListRss(RssItemId, listMain.getUrl(), listRss.getPubDate(), listRss.getTitle(), listRss.getDescription(),
listRss.getLink(), listRss.getImage());
dbResult.insert(item);
insideItem = false;