1

这可能是我有限的经验,但我只是遇到了一个让我感到困惑的奇怪错误。我有一个带有一堆按钮的活动,然后将它们分配到二维数组(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 在那里中断。

除此之外,我没有对源代码进行任何更改。(我什至有差异,而且我也没有触及任何其他文件。)

我做错什么了?

4

1 回答 1

3

该错误与按钮无关。如果是这种情况,堆栈跟踪会提到“按钮”、“onClick”或与按钮相关的东西。

相反,NullPointerException当系统连接到Service. 查看异常发生位置的来源

在 android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1061)

if (service != null) {
    // mConnection is a ServiceConnection
    mConnection.onServiceConnected(name, service); // 1061
}

可以看出它很可能与Context#bindService()相关null ServiceConnection

于 2012-08-21T09:19:07.287 回答