如果XML上的项目没有附件

时间:2018-02-07 18:25:37

标签: android xml sqlite rss

请帮帮我! 我制作了一个简单的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;
    }
}

1 个答案:

答案 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;