0

アプリの Web ラジオから .xml ファイルを読みたいと思っています。

このチュートリアルを使用しました: http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/

これは機能です:

public String leggi_palinsesto(){
    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(URL); // getting XML
    Document doc = parser.getDomElement(xml); // getting DOM element

    NodeList nl = doc.getElementsByTagName(KEY_ITEM);

    // looping through all item nodes <item>
    for (int i = 0; i < 1; i++) {
        Element e = null;
        String titolo = parser.getValue(e, KEY_TITOLO); // name child value
        String artista = parser.getValue(e, KEY_ARTISTA); // cost child value

        System.out.println(artista+" - "+titolo);
    }

    return titolo+" "+artista;
}

しかしNodeList nl = doc.getElementsByTagName(KEY_ITEM);、アプリに到着するとクラッシュします。

これはlogcatです:

06-28 18:27:58.089: E/AndroidRuntime(1050): FATAL EXCEPTION: main
06-28 18:27:58.089: E/AndroidRuntime(1050): java.lang.NullPointerException
06-28 18:27:58.089: E/AndroidRuntime(1050):     at it.axiomatic.radioamicizia.RadioAmiciziaActivity.leggi_palinsesto(RadioAmiciziaActivity.java:315)
06-28 18:27:58.089: E/AndroidRuntime(1050):     at it.axiomatic.radioamicizia.RadioAmiciziaActivity$1$1.run(RadioAmiciziaActivity.java:122)
06-28 18:27:58.089: E/AndroidRuntime(1050):     at android.os.Handler.handleCallback(Handler.java:587)
06-28 18:27:58.089: E/AndroidRuntime(1050):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-28 18:27:58.089: E/AndroidRuntime(1050):     at android.os.Looper.loop(Looper.java:123)
06-28 18:27:58.089: E/AndroidRuntime(1050):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-28 18:27:58.089: E/AndroidRuntime(1050):     at java.lang.reflect.Method.invokeNative(Native Method)
06-28 18:27:58.089: E/AndroidRuntime(1050):     at java.lang.reflect.Method.invoke(Method.java:521)
06-28 18:27:58.089: E/AndroidRuntime(1050):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-28 18:27:58.089: E/AndroidRuntime(1050):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-28 18:27:58.089: E/AndroidRuntime(1050):     at dalvik.system.NativeStart.main(Native Method)

これは定数です:

static final String URL = "http://www.radioamicizia.com/demo.xml";
    // XML node keys
    static final String KEY_ITEM = "song"; // parent node
    static final String KEY_TITOLO = "Title";
    static final String KEY_ARTISTA = "Artist";

誰かがこの問題を手伝ってくれませんか。

4

2 に答える 2

0

doc 変数は null であるため、getElementByTagName を呼び出そうとすると、NPE がスローされます。

これは parser.getDomElement(xml) またはその前からのものです。

つまり、チュートリアルに完全に従っていること、および XmlParser クラスがチュートリアルとまったく同じであること、およびメソッドが null を返さないことを確認してください。

また、デバッガーをプロセスにアタッチし、ブレークポイントを設定し、その方法でコードを検査する方法を学びます。Intellij コミュニティ エディションを使用することをお勧めします。これは非常に簡単です。:)

于 2012-06-28T16:38:37.797 に答える
0

.xml ファイル内に XML ファイルをダウンロードすることをお勧めしますAsyncTask。通常、ネットワーク操作はメイン UI スレッドから切り離します。

Web サイトからデータを取得しNullPointerExceptionString xmlいない可能性が高いため、入力をチェックせずにその null 文字列を XML パーサーに渡そうとします。

したがって、これを読むことをお勧めします: http://developer.android.com/reference/android/os/AsyncTask.html

そして、次のように解析する前に、文字列が null かどうかを確認します。

if (xml!= null && !xml.isEmpty()) {
    Document doc = parser.getDomElement(xml); // getting DOM element
    NodeList nl = doc.getElementsByTagName(KEY_ITEM);
    ...
}
于 2012-06-28T17:17:06.350 に答える