使用我的设备进行调试时,Android应用程序崩溃了

时间:2017-02-24 17:36:31

标签: android

Hello Guys我有一个奇怪的问题 我是Android应用程序开发的新手 我将我的设备(三星A5)连接到Android Studio以使用它而不是使用模拟器。 当我运行应用程序时

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);
           }
       });
    }
}

请向我解释问题在哪里,我该怎么做才能解决问题 非常感谢你提前

1 个答案:

答案 0 :(得分:2)

首先,您需要了解java属性是如何initialized

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

现在你会发现

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

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