我写了一个有两个按钮的布局,然后主方法如下: public class MainActivity extends ActionBarActivity { private Button button1 = (Button) findViewById(R.id.button); private Button button2 = (Button) findViewById(R.id.button2); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } 这样写就报错了。java.lang.NullPointerException: Attempt to invoke virtual method “”android.view.View android.view.Window.findViewById(int)”” on a null object reference public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { Button button1 = (Button) findViewById(R.id.button); Button button2 = (Button) findViewById(R.id.button2); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } 我觉得第一种写法更好啊,,但是怎么会报错呢?求大家指教。能解读下这个异常更好 |
|
5分 |
没加入布局文件就初始化,肯定出错啊
|
5分 |
一般要先setContentView再初始化控件
|
5分 |
第一种你只能是先声明一个变量,并不能直接找到它。
|
楼上说的对,我就打下酱油,看能不能混点分,
|
|
10分 | |
5分 |
楼上的都说得很清楚了。
我更习惯的写法是 public class MainActivity extends ActionBarActivity { private Button button1 ; private Button button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button) findViewById(R.id.button); |
+1 |
|
5分 |
在 onCreate(Bundle savedInstanceState) 方法执行之前,还没有加载布局,所以找不到指定的按钮。
|
楼上正解Q!!!!!!!!!!!!!!!!
|
|
5分 |
加载完布局后,在布局中findview。布局要是没有加载,view就不存在了。
super.onCreate(savedInstanceState); Button button1 = (Button) findViewById(R.id.button); Button button2 = (Button) findViewById(R.id.button2); |
建议楼主还是先看看google的官方开发文档
|
|
懂了,谢谢各位 |
|
谢谢大家的解答。就是楼上说的要先用 setContentView(R.layout.activity_main)来加载View才能找到控件
|