这可能是我有限的经验,但我只是遇到了一个让我感到困惑的奇怪错误。我有一个带有一堆按钮的活动,然后将它们分配到二维数组(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)
我使用处理程序从 Timer Task 调用 ui 更新,但即使我删除了计时器,我仍然会收到此错误,所以它可能不是我自己的 Handler 在那里中断。
除此之外,我没有对源代码进行任何更改。(我什至有差异,而且我也没有触及任何其他文件。)
我做错什么了?