【问题标题】:setOnClickListener throws NullPointerException ONLY inside for loop. Why?setOnClickListener 仅在 for 循环内引发 NullPointerException。为什么?
【发布时间】:2010-11-25 04:25:06
【问题描述】:
private final Button[] BUTTONS = {
    btn1, btn2, btn3,btn4
};

...

btn1 = (Button) this.findViewById(R.id.btn_1);
btn2 = (Button) this.findViewById(R.id.btn_2);
btn3 = (Button) this.findViewById(R.id.btn_3);
btn4 = (Button) this.findViewById(R.id.btn_4);

...

int n = BUTTONS.length;
for(int i=0; i<n; i++) {
    if(DEBUG) Log.d(TAG, String.valueOf(i));
    BUTTONS[i].setOnClickListener(this);
}

抛出 NullPointerException,而

btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);

工作正常。对我来说没有任何意义。

【问题讨论】:

  • 您使用了四次 btn1。也许 btn2、3 或 4 不存在(即 findViewById 返回 null)?顺便说一句,你为什么从 1 开始?为什么不是 0?
  • 对不起,我在做实验。我现在已经更正了代码。

标签: android arrays button for-loop nullpointerexception


【解决方案1】:

我认为这是因为您的 Buttons 数组是在 btn1,... 仍然为空时创建的。

因此,当您在循环中调用 BUTTONS[i].setOnClickListener 时,您实际上是在说 null.setOnClickListener 会给出异常。

尝试将数组设置为变量,并在您分配 btn1 等之后进行。

还没有测试过,但是这样的东西可能会更好......

私有 ArrayList mBtns = new ArrayList();

private void initButton(int id) { button = (Button) findViewById(id); button.setOnClickListener(this); mBtns.add(按钮); }

...

initButton(R.id.btn_1); 初始化按钮(R.id.btn_2); 初始化按钮(R.id.btn_3); initButton(R.id.btn_4);

此外,除非按钮执行非常相似的操作,否则您可能会发现最好在布局中的每个按钮上简单地定义 onClick 属性并为自己节省大量编码(仅在 Android 1.6 及更高版本中可用)。

【讨论】:

    猜你喜欢
    • 2011-11-30
    • 2013-12-26
    • 2020-08-25
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多