0

RSS フィードを解析する Android アプリを作成していますが、過去数週間はうまく機能しています。しかし最近、投稿の 1 つに<enclosure>タグがあり、アプリが動作しなくなり、logcat は DOMParser が NullPointerException をスローしたと述べました。
Java に関する私の知識で可能な限りのことを試してみました。しかし、役に立たない。

ちなみに、問題のあるタグを手動で削除すると、問題は解決し、アプリは再び正常に動作します。

これは私が解析しているxmlです

<item>
<title>Title</title>
<link>Link</link>
<pubDate>Sun, 27 Jan 2013 05:08:30 +0000</pubDate>
<dc:creator></dc:creator>
<guid isPermaLink="false">guid</guid>
<content:encoded>
Content
</content:encoded>
<enclosure url="" length="22836034" type="audio/mpeg"/>
</item>

関係のないタグを削除し、プライバシーと簡潔にするために情報を置き換えました

そして、パーサーのセクション:

Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();


            NodeList nl = doc.getElementsByTagName("item");



            int length = nl.getLength();

            for (int i = 0; i < length; i++) {
                Node currentNode = nl.item(i);
                RSSItem _item = new RSSItem();




                NodeList nchild = currentNode.getChildNodes();
                int clength = nchild.getLength();


                for (int j = 1; j < clength; j = j + 2) {

                    Node thisNode = nchild.item(j);
                    String nodeContent = null;
                    String nodeName = thisNode.getNodeName();


                    nodeContent = nchild.item(j).getFirstChild().getNodeValue();

logcat では、次の行が表示されます。

nodeContent = nchild.item(j).getFirstChild().getNodeValue();

<enclosure>が NullPointerException の理由ですが、前述したように、フィードにタグがない場合は正常に機能します。

つまり、XML ファイルに<enclosure>タグが含まれていると、アプリが動作しなくなります。しかし、タグがなくても問題なく動作します。私がやろうとしているのは、タグを無視するか、(適切に) 削除して、残りのドキュメントの解析を続行することです。
現時点では何も機能していないため、ここで質問しています。

どんな助けでも大歓迎です。

4

1 に答える 1

3

そうです - の各子ノードの最初の子の値を求めていますitem

ノードには子ノードがないためenclosure文書化されているように null を返します。getFirstChild

このノードの最初の子。そのようなノードがない場合、これは null を返します。

したがってgetFirstChild()、任意のノードで呼び出しても問題ありませんが、呼び出す前に値が null かどうかを確認する必要がありますgetNodeValue()

于 2013-01-27T15:46:52.893 に答える