1

それは私の限られた経験かもしれませんが、私を混乱させる奇妙なエラーに遭遇しました. 2 次元配列 (btns[][]) に割り当てられる一連のボタンを含むアクティビティがあります。最初は、すべてのボタンに対して、基本的に次のような匿名クラスを使用して OnClick リスナーを設定していました。

btns[x][y].setOnClickListener(new OnClickListener(() {
    onClick(View v) {
        btns_OnClick(x, y, btns[x][y]);
    }

この場合の x と y はハードコードされた定数ではありません。

これは本当に私を悩ませていたので、実装しました:

private class TimerButtonOnClickListener implements OnClickListener {
    int[] crds;

    public TimerButtonOnClickListener(int row, int col) {
        crds = new int[] { row, col };
    }

    public void onClick(View v) {
        btns_OnClick(crds[0], crds[1],
        btns[crds[0]][crds[1]]);
    }
}

そして、次のようにリスナーをボタンに割り当てます。

    for (int i = 0; i < 6; i++)
        for (int j = 0; j < 2; j++)
            btns[i][j].setOnClickListener(new TimerButtonOnClickListener(i, j));

上記は onCreate で発生しますが、クラッシュはすぐには発生しません。実際、どこでクラッシュするのかわかりません。LogCatは与える

FATAL EXCEPTION: main
 java.lang.NullPointerException
    at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1061)
    at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1078)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4340)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

ハンドラーを使用してタイマー タスクから ui の更新を呼び出しますが、タイマーを削除してもこのエラーが発生するため、おそらく自分のハンドラーが壊れているわけではありません。

それ以外は、ソースに変更を加えていません。(私は差分も取りましたが、他のファイルにも触れていません。)

私は何を間違えましたか?

4

1 に答える 1