0

am url からコンテンツを解析しているときに例外が発生します。私が得ている例外を以下に示します。

10-16 12:46:59.373: E/AndroidRuntime(4362): FATAL EXCEPTION: Thread-12
10-16 12:46:59.373: E/AndroidRuntime(4362): java.lang.NullPointerException
10-16 12:46:59.373: E/AndroidRuntime(4362):     at com.android.gyan.SearchResults$4.run(SearchResults.java:162)
10-16 12:46:59.373: E/AndroidRuntime(4362):     at java.lang.Thread.run(Thread.java:1019)
10-16 12:46:59.783: E/WindowManager(4362): Activity com.android.gyan.SearchResults has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4056d3b0 that was originally added here
10-16 12:46:59.783: E/WindowManager(4362): android.view.WindowLeaked: Activity com.android.gyan.SearchResults has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4056d3b0 that was originally added here
10-16 12:46:59.783: E/WindowManager(4362):  at android.view.ViewRoot.<init>(ViewRoot.java:258)
10-16 12:46:59.783: E/WindowManager(4362):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
10-16 12:46:59.783: E/WindowManager(4362):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
10-16 12:46:59.783: E/WindowManager(4362):  at android.view.Window$LocalWindowManager.addView(Window.java:424)
10-16 12:46:59.783: E/WindowManager(4362):  at android.app.Dialog.show(Dialog.java:241)
10-16 12:46:59.783: E/WindowManager(4362):  at android.app.ProgressDialog.show(ProgressDialog.java:107)
10-16 12:46:59.783: E/WindowManager(4362):  at android.app.ProgressDialog.show(ProgressDialog.java:95)
10-16 12:46:59.783: E/WindowManager(4362):  at com.android.gyan.SearchResults.ParsingCall(SearchResults.java:147)
10-16 12:46:59.783: E/WindowManager(4362):  at com.android.gyan.SearchResults.onCreate(SearchResults.java:137)
10-16 12:46:59.783: E/WindowManager(4362):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-16 12:46:59.783: E/WindowManager(4362):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
10-16 12:46:59.783: E/WindowManager(4362):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
10-16 12:46:59.783: E/WindowManager(4362):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-16 12:46:59.783: E/WindowManager(4362):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
10-16 12:46:59.783: E/WindowManager(4362):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-16 12:46:59.783: E/WindowManager(4362):  at android.os.Looper.loop(Looper.java:130)
10-16 12:46:59.783: E/WindowManager(4362):  at android.app.ActivityThread.main(ActivityThread.java:3683)
10-16 12:46:59.783: E/WindowManager(4362):  at java.lang.reflect.Method.invokeNative(Native Method)
10-16 12:46:59.783: E/WindowManager(4362):  at java.lang.reflect.Method.invoke(Method.java:507)
10-16 12:46:59.783: E/WindowManager(4362):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-16 12:46:59.783: E/WindowManager(4362):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-16 12:46:59.783: E/WindowManager(4362):  at dalvik.system.NativeStart.main(Native Method)

私が解析に使用しているのはこれです。

public void ParsingCall(final String urlFirst) {
    final Bundle b = new Bundle();
    progressDialog = ProgressDialog.show(SearchResults.this, " ",
            "Searching.....", true, false);
    progressDialog.setIcon(-1);

    progressDialog.setIcon(R.drawable.logo);
    new Thread(new Runnable() {

        public void run() {
            LyricsData dataContent = null;

            dataContent = LyricsParse.Parse(urlFirst);
            Message msg = new Message();
            {

                {
                    if(dataContent.contentList != null) {
                        b.putStringArrayList("contentList",
                            dataContent.contentList);
                    }else {
                        //dataContent.contentList[0] = {"No value"};
                        b.putString("contentList",
                                "No value");
                    }
                    if(dataContent.optionNameArrayList != null)
                    b.putStringArrayList("optionNameArrayList",
                            dataContent.optionNameArrayList);
                    else
                        b.putString("optionNameArrayList",
                                "No value");
                }
            }

            msg.setData(b);

            handler.sendMessage(msg);

        }
    }).start();
}

また、メッセージを取得し、そこからデータを取得し、それらをアクティビティで使用しているビューに設定するハンドラーも作成しました。この例外は毎回取得されるわけではないことに注意してください。それは非常にまれになっています。

4

3 に答える 3

2

run メソッドにエラーがあります。run メソッドの開始時にデバッグ ポイントを配置すると、変数が NULL に初期化されます。

于 2012-10-16T12:04:25.950 に答える
0

1行削除..

progressDialog.setIcon(-1);

progressDialog.setIcon(R.drawable.logo);
于 2012-10-16T07:45:33.173 に答える
0

次の行に従ってNullPointerException、ファイルの 147 行目で取得しています。SearchResults.java

10-16 12:46:59.783: E/WindowManager(4362):  at com.android.gyan.SearchResults.ParsingCall(SearchResults.java:147)

この行のすべての変数が初期化され、null に設定されていないことを確認してください。呼び出していると思いますが、変数をProgressDialog.show()初期化していないか、初期化が範囲外です。ProgressDialog

于 2012-10-16T07:49:03.593 に答える