0

私は 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)は、 class のセッター メソッドですRSSItem

私はこの問題をグーグルで検索し、StringBuilder代わりに使用する場所を読みました。そこで、 を使ってみましたStringBuilder。(使用時にコードにコメントしましたStringBuilder)。しかし、その後、私は受け取り始めましたNullPointerException

この問題を解決するための提案はありますか?

4

2 に答える 2