我的应用程序中有多个按钮,我想使用循环为每个按钮设置相同的文本。因此,我声明了一个数组并以这种方式用按钮填充它:
public class MainActivity extends AppCompatActivity {
Button b1,b2,b3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(Button)findViewById(R.id.button);
b2=(Button)findViewById(R.id.button2);
b3=(Button)findViewById(R.id.button3);
}
Button[] buArray ={b1,b2,b3};
void b1clicked(View view) {
for (int i =0;i<3;i++) {
buArray[i].setText("it works");
}
}
}
但是当我尝试从像这样的数组中为按钮设置文本时
buArray[0].setText("some text");
这会导致我的应用崩溃并强制关闭 并在日志中给我这样的错误 “ NullPointerException
答案 0 :(得分:1)
由于您的Button[] buArray ={b1,b2,b3};
在方法之外,因此在创建Activity对象时会对其进行初始化。此时,b1
,b2
和b3
均为null
。
将初始化移动到onCreate()
方法中,它将起作用。
Button b1,b2,b3;
Button[] buArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(Button)findViewById(R.id.button);
b2=(Button)findViewById(R.id.button2);
b3=(Button)findViewById(R.id.button3);
buArray = new Button[] {b1, b2, b3};
}