当我的设备调试Android应用程序崩溃

问题描述:

你好,我有一个奇怪的问题 我是新的Android应用程序开发 我连接我的设备(三星A5)Android Studio使用它,而不是使用模拟器。 当我跑的应用当我的设备调试Android应用程序崩溃

package com.example.bob.myfirstapp; 

import android.app.Activity; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button b = (Button)findViewById(R.id.button); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      setContentView(R.layout.contact); 

      } 
     }); 
    } 
} 

它运行完全 但是当我添加此:按钮BC =(按钮)findViewById(R.id.button);我在运行它时崩溃了mainActivity类中的 。

package com.example.bob.myfirstapp; 

import android.app.Activity; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 
/***********************************************/ 
Button bc = (Button)findViewById(R.id.button); 
/**********************************************/ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button b = (Button)findViewById(R.id.button); 
     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setContentView(R.layout.contact); 
      } 
     }); 
    } 
} 

哪里出了问题,我应该怎么做才能解决它 非常感谢你提前

首先你需要了解Java属性如何initialized的请向我解释。

接下来,您需要了解findViewById的工作原理。它查找从DecorView又名root view开始的视图,该视图通过调用setContentView进行初始化。现在

,你会发现,

Button bc = (Button)findViewById(R.id.button); 

setContentView调用之前实际上得到执行。这会给你带来麻烦。

+0

非常感谢你的回答非常有价值,并让我明白我的错误在哪里:) –

+0

@ N.Belhadj很乐意帮忙 – j2ko