繁体   English   中英

当我尝试在Studio中切换活动时,为什么会收到java.lang.NullPointerException错误?

[英]Why am I getting a java.lang.NullPointerException error when I try to switch activities in studio?

我试图查找是什么原因导致的,但我无法找出原因所在-我正在设置点击监听器以激活按钮开关。 我没有收到任何错误弹出窗口,但是当我运行该应用程序时,它崩溃了,并且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是第二个活动,其中没有任何内容。

第一:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loading_screen);

之后:

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

和第二个细节:

LoadingScreen不是您当前的活动...是MainScreen

您在setContentView()之前调用findViewById() setContentView() 尝试这个:

@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) {
    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方法中。 在那之前它只是null

初始化按钮时尚未设置布局。 因此,首先需要设置布局,然后初始化可以解决问题的按钮。请尝试以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM