Я разрабатываю устройство чтения RSS-каналов для Android, а для разбора XML-файлов я использую API SAX. Проблема в том, что при анализе данных часть текста усекается случайным образом в некоторых случайно выбранных тегах (я имею в виду разные экземпляры одного и того же тега). Мне более понятно, я добавил скриншот.SAXParser дает неожиданные случайные результаты
Вот мой Handler класс:
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
.
Любые предложения по избавлению от этой проблемы?
Спасибо. Это сработало отлично :) – Rajat