当我尝试在studio中切换活动时,为什么会出现java.lang.NullPointerException错误?

当我尝试在studio中切换活动时,为什么会出现java.lang.NullPointerException错误?,java,android,Java,Android,我已经试着查找导致这种情况的原因,但我不知道为什么会发生这种情况——我正在设置一个点击式侦听器,以便有一个按钮切换活动。我没有收到任何错误弹出窗口,但是当我运行应用程序时,它崩溃了,logcat显示我在侦听器本身上得到了一个java.lang.NullPointerException。这是密码- public class MainScreen extends AppCompatActivity { Button btn; @Override protected void onCreate(

我已经试着查找导致这种情况的原因,但我不知道为什么会发生这种情况——我正在设置一个点击式侦听器,以便有一个按钮切换活动。我没有收到任何错误弹出窗口,但是当我运行应用程序时,它崩溃了,logcat显示我在侦听器本身上得到了一个java.lang.NullPointerException。这是密码-

public class MainScreen extends AppCompatActivity {

Button btn;


@Override
protected void onCreate(Bundle savedInstanceState) {

    btn = (Button) findViewById(R.id.mainTypesBtn);



    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(MainScreen.this, MainTypes.class));
        }
    });




    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading_screen);
}
我在
btn.setOnClickListener(new View.OnClickListener(){


MainTypes是第二个活动,其中没有任何内容。

setContentView()
之前调用
findViewById()
。请尝试以下操作:

@Override 
protected void onCreate(Bundle savedInstanceState) {

    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading_screen);

    btn = (Button) findViewById(R.id.mainTypesBtn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override 
        public void onClick(View v) {
            startActivity(new Intent(LoadingScreen.this, MainTypes.class));
        } 
    }); 
} 
第一:

紧接着:

@Override
protected void onCreate(Bundle savedInstanceState) {
然后你做:

btn = (Button) findViewById(R.id.mainTypesBtn);

btn.setOnClickListener(new View.OnClickListener() {

@Override
    public void onClick(View v) {
        startActivity(new Intent(LoadingScreen.this, MainTypes.class));
    }
});
第二个细节:


加载屏幕不是您当前的活动…是主屏幕

尝试这样的操作

@Override
protected void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading_screen);
    btn = (Button) findViewById(R.id.mainTypesBtn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(LoadingScreen.this, MainTypes.class));
        }
    });
}

实际上,
setContentView
就是这样做的,在
setContentView
方法中,您的按钮将创建。在此之前,它只是空的。初始化按钮时,您的布局尚未设置。因此,首先您需要设置布局,然后初始化可以解决问题的按钮。请尝试以下操作:`

@Override
protected void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading_screen);
    Button btn = (Button) findViewById(R.id.mainTypesBtn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          startActivity(new Intent(LoadingScreen.this, MainTypes.class));
        }
    });
}`

将btn初始化和setOnClickListener移到setContentView之后。此处的主旨是您必须初始化或为
setContentView
之后的视图提供任何侦听器。1向上投票以提及主屏幕而不是加载屏幕
@Override
protected void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading_screen);
    Button btn = (Button) findViewById(R.id.mainTypesBtn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          startActivity(new Intent(LoadingScreen.this, MainTypes.class));
        }
    });
}`