我正在为 Android 开发一个 RSS 提要阅读器,为了解析 XML 文件,我正在使用 SAX API。问题是在解析数据时,一些文本在一些随机选择的标签中以随机方式被截断(我的意思是同一标签的不同实例)。对我来说更清楚的是,我添加了一个屏幕截图。
这是我的处理程序类:
public class RssParseHandler extends DefaultHandler {
private List<RssItem> rssItems;
private RssItem currentItem;
private boolean parsingTitle;
private boolean parsingLink;
//StringBuilder temp;
public RssParseHandler() {
rssItems = new ArrayList<RssItem>();
//temp = new StringBuilder();
}
public List<RssItem> getItems() {
return rssItems;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if ("item".equals(qName)) {
currentItem = new RssItem();
} else if ("title".equals(qName)) {
parsingTitle = true;
} else if ("link".equals(qName)) {
parsingLink = true;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if ("item".equals(qName)) {
rssItems.add(currentItem);
currentItem = null;
} else if ("title".equals(qName)) {
//currentItem.setTitle(new String(temp));
//temp = new StringBuilder();
parsingTitle = false;
} else if ("link".equals(qName)) {
//currentItem.setLink(new String(temp));
//temp = new StringBuilder();
parsingLink = false;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (parsingTitle) {
if (currentItem != null)
{
//temp.append(ch, start, length);
currentItem.setTitle(new String(ch, start, length));
}
} else if (parsingLink) {
if (currentItem != null) {
//temp.append(ch, start, length);
currentElement.setLink(new String(ch, start, length));
parsingLink = false;
}
}
}
}
方法setTitle(String str)
和setLink(String str)
是类的设置方法RSSItem
。
我用谷歌搜索了这个问题并在某处阅读以StringBuilder
代替使用。因此我尝试使用StringBuilder
. (我在使用时已对代码进行了注释StringBuilder
)。但后来我开始收到NullPointerException
.
有什么建议可以摆脱这个问题吗?