SAXparser android XML feed麻烦

时间:2015-04-15 18:45:56

标签: java android xml rss sax

我对以下问题有一个非常类似的问题。不幸的是,在阅读完this question后,我没有找到答案。

我正在尝试从我的网站为我的Android应用程序收集RSS提要。我使用以下java脚本来执行此操作。

 public class XMLHelper extends DefaultHandler {

private String URL_MAIN = "http://**.**.***.***/blank/blank/feed/?format=xml";
String TAG = "XMLHelper";

Boolean currTag = false;
String currTagVal = "";
public ItemValue post = null;
public ArrayList<ItemValue> posts = new ArrayList<ItemValue>();


public void get() {
    try {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser mSaxParser = factory.newSAXParser();
        XMLReader mXmlReader = mSaxParser.getXMLReader();
        mXmlReader.setContentHandler(this);
        InputStream mInputStream = new URL(URL_MAIN).openStream();
        mXmlReader.parse(new InputSource(mInputStream));
    } catch(Exception e) {
        Log.e(TAG, "Exception: " + e.getMessage());
    }
}

@Override
public void characters(char[] ch, int start, int length)
        throws SAXException {
    if(currTag) {
        currTagVal = currTagVal + new String(ch, start, length);
        currTag = false;
    }
}


@Override
public void endElement(String uri, String localName, String qName)
        throws SAXException {
    currTag = false;

    if(localName.equalsIgnoreCase("title"))
        post.setTitle(currTagVal);

    else if (localName.equalsIgnoreCase("item")) {
        posts.add(post);
    }
}

@Override
public void startElement(String uri, String localName, String qName,
                         Attributes attributes) throws SAXException {
    Log.i(TAG, "TAG: " + localName);

    currTag = true;
    currTagVal = "";

    if(localName.equals("item"))
        post = new ItemValue();
}

这是从以下xml中提取的。

 <channel>
<title>Welcome to my website</title>
<link>http://**.**.***.***/blank/blank/feed</link>
<atom:link href="http://**.**.***.***/blank/blank/feed/?format=xml" rel="self" type="application/rss+xml"/>
<description>Activity feed</description>
<lastBuildDate>Wed, 15 Apr 2015 16:21:17 +0000</lastBuildDate>
<generator>http://buddypress.org/?v=2.2.1</generator>
<language>en-US</language>
<ttl>30</ttl>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>2</sy:updateFrequency>
<item>
<guid isPermaLink="false">822b2a07599526230c7bae1b1d0a00bf</guid>
<title>
gordy77 posted an update in the group ****, **: Now the magic begins
</title>
<link>http://**.**.***.***/draft-2/p/9/</link>
<pubDate>Mon, 13 Apr 2015 16:47:29 +0000</pubDate>
<content:encoded>...</content:encoded>
<slash:comments>0</slash:comments>
</item>

现在,当我运行应用程序时,我只得到一个空白屏幕并出现以下错误。

E/XMLHelper﹕ Exception: null

通过更改以下代码,我可以让应用程序运行,但它只会提取一条评论&#34; item&#34;从RSS feed中重复3次。它始终是第一个&#34;项目&#34;张贴在那个饲料x3上。

if(localName.equals("item"))
        post = new ItemValue();

if(localName.equals("channel"))
        post = new ItemValue();

1 个答案:

答案 0 :(得分:0)

在此代码中:

 if(localName.equalsIgnoreCase("title"))
        post.setTitle(currTagVal);

检查是否post is null,因为标记title也可以显示在帖子之外

示例:

 if(null != post && localName.equalsIgnoreCase("title"))
        post.setTitle(currTagVal);