それは私の限られた経験かもしれませんが、私を混乱させる奇妙なエラーに遭遇しました. 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 の更新を呼び出しますが、タイマーを削除してもこのエラーが発生するため、おそらく自分のハンドラーが壊れているわけではありません。
それ以外は、ソースに変更を加えていません。(私は差分も取りましたが、他のファイルにも触れていません。)
私は何を間違えましたか?