我试图将视图设置为启用(false(,但它一直给我这个错误:
Caused by: java.lang.NullPointerException: Attempt to
invoke virtual method 'void android.widget.Button.setEnabled(boolean)'
on a null object reference
我不明白的是,错误不是发生在ccl_stage11[][]
,而是发生在vtl_stage11
和hrl_stage11[][]
,即使它们以相同的方式使用相同的for
。
我试图在setEnabled部分展开"for"循环,但它不起作用。 谁能帮我解决这个问题? 下面是与此错误相关的代码。
public class Stage1Activity1 extends AppCompatActivity {
Button[][] ccl_stage11 = new Button[4][4];
Button[][] hrl_stage11 = new Button[4][4];
Button[][] vtl_stage11 = new Button[4][4];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stage11);
buttonSettings();
}
protected void buttonSettings() {
int k = 0;
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
ccl_stage11[i][j] = findViewById(R.id.ccl_stage11_11 + k);
ccl_stage11[i][j].setEnabled(false);
k++;
}
}
for (int i = 0; i <= 3; i++) {
for (int j = 0; j <= 3; j++) {
vtl_stage11[i][j] = findViewById(R.id.vtl_stage11_00 + k);
hrl_stage11[i][j] = findViewById(R.id.hrl_stage11_00 + k);
k++;
}
}
for(int i=0;i<=3;i++){
for (int j =0;j<=3;j++){
vtl_stage11[i][j].setEnabled(false);
hrl_stage11[i][j].setEnabled(false);
}
}
ccl_stage11[1][3].setEnabled(true);
ccl_stage11[3][1].setEnabled(true);
}
错误发生在
for(int i=0;i<=3;i++){
for (int j =0;j<=3;j++){
vtl_stage11[i][j].setEnabled(false);
hrl_stage11[i][j].setEnabled(false);
}
}
在执行任何操作之前检查null
。
for(int i=0;i<=3;i++){
for (int j =0;j<=3;j++){
// add this condition!
if(vtl_stage11[i][j] != null) {
vtl_stage11[i][j].setEnabled(false);
hrl_stage11[i][j].setEnabled(false);
}
}
}