我在类中定义了两个Button,在定义时初始化了这两个Button,编译无错,但是在运行时就出错
当我把这两个Button的初始化放在onStart()中时程序就能正常运行了,请问这是怎么回事呢?下面是出错时的代码//......public class FirstActivity extends Activity{
  
  private Button exchangeButton = (Button)findViewById(R.id.exchange_button);
  private Button exitButton = (Button)findViewById(R.id.exit_button);
  
  @Override
  public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fst_main);    
  }
  
  @Override
  public void onStart(){
    super.onStart();//如果将初始化放在这里就不会错了    
//    exchangeButton = (Button)findViewById(R.id.exchange_button);
//    exitButton = (Button)findViewById(R.id.exit_button);
    
    //创建按钮监听事件。一旦切换按钮被点击,则进行界面切换
    exchangeButton.setOnClickListener(new Button.OnClickListener(){
      @Override
      public void onClick(View v){
        //实现切换功能  
        Intent exchangeIntent = new Intent();
        exchangeIntent.setClass(FirstActivity.this,SecondActivity.class);
        startActivity(exchangeIntent);    
      }
    });
  }
  
  @Override
  public void onResume(){
    super.onResume();
    //创建退出按钮的监听事件。一旦点击退出,则退出本Activity
    exitButton.setOnClickListener(new Button.OnClickListener(){
      @Override
      public void onClick(View v){
        //实现关闭本Activity的功能
        FirstActivity.this.finish();
      }
    });
  }
}

解决方案 »

  1.   

    成员变量初始化在onCreate方法调用之前,于是Activity还没setContentView(R.layout.fst_main);你就去findViewById了,获得的就是个null。
      

  2.   

    噢,谢谢你,我还想再问一下,就是那个findViewById不是到xml里面去找那个button吗?为什么要先setContentView才能再findViewById呢?
      

  3.   

    Activity是个容器,你首先要把布局文件放进来,那些组件才在这个Activity里面。你才可以find到~
      

  4.   

    楼上的说的很对
    给你个建议以后用的时候写个方法先把用的组件初始化了,就不容易犯那种错误了
    比如
    public class FirstActivity extends Activity{
      private Button exchangeButton ,exitButton ;
        
      @Override
      public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fst_main); 
        init();
      } 
       
       private void init(){
            exchangeButton = (Button)findViewById(R.id.exchange_button);
            exitButton = (Button)findViewById(R.id.exit_button);