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