SAXparser android XML feed 麻烦
SAXparser android XML feed trouble
我遇到了与以下问题非常相似的问题。不幸的是,在通读 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
通过更改以下代码,我可以将应用程序设置为 运行,但它只会从 RSS 提要中提取一条评论 "item" 并重复 3 次。它始终是第一个 "item" 在该提要 x3 上发布的。
if(localName.equals("item"))
post = new ItemValue();
if(localName.equals("channel"))
post = new ItemValue();
在此代码中:
if(localName.equalsIgnoreCase("title"))
post.setTitle(currTagVal);
检查是否 post is null
,因为标签 title
也可以出现在 post
之外
示例:
if(null != post && localName.equalsIgnoreCase("title"))
post.setTitle(currTagVal);
我遇到了与以下问题非常相似的问题。不幸的是,在通读 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
通过更改以下代码,我可以将应用程序设置为 运行,但它只会从 RSS 提要中提取一条评论 "item" 并重复 3 次。它始终是第一个 "item" 在该提要 x3 上发布的。
if(localName.equals("item"))
post = new ItemValue();
if(localName.equals("channel"))
post = new ItemValue();
在此代码中:
if(localName.equalsIgnoreCase("title"))
post.setTitle(currTagVal);
检查是否 post is null
,因为标签 title
也可以出现在 post
示例:
if(null != post && localName.equalsIgnoreCase("title"))
post.setTitle(currTagVal);