如何在OnCreate中添加if判断,解决NextActivity跳转MainActivity3闪退问题
跳转失败应用重启的原因
核心原因是空指针异常(NullPointerException),触发点在MainActivity3的onCreate逻辑中:
- 你从NextActivity启动MainActivity3时,创建的
Intent intent1没有携带MainActivity2.extraint对应的参数 - 后续MainActivity3中直接调用
number.equals("1"),此时number为null,直接触发空指针导致应用崩溃重启
另外还有3个潜在崩溃点需要同步修复:
- NextActivity中从MainActivity传递过来的
EXTRA_MESSAGE、EXTRA_MESSAGE1可能为空,直接调用message.toString()会触发空指针,且该变量本身就是String类型,不需要额外调用toString方法 - 需确认
R.id.plain1、R.id.plain2、R.id.frames这几个ID在对应布局文件中真实存在,否则findViewById返回null,调用getText/setVisibility也会触发空指针 - 需确认
AndroidManifest.xml中已经注册了MainActivity3组件,未注册的话启动也会触发异常
修复方案
1. 修复NextActivity的跳转逻辑
启动MainActivity3时传入需要的extra参数,同时增加空校验:
public void onBtnClick(View view){ Intent intent = getIntent(); Intent intent1= new Intent(this,MainActivity3.class); // 补充传入MainActivity3需要的参数,可替换为你实际需要传递的数值 intent1.putExtra(MainActivity2.extraint, "1"); String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); String message1 = intent.getStringExtra(MainActivity.EXTRA_MESSAGE1); TextView textView= findViewById(R.id.textView); TextView plain1= findViewById(R.id.plain1); TextView plain2= findViewById(R.id.plain2); String b=plain1.getText().toString(); String c=plain2.getText().toString(); // 先判空再比较,避免空指针 if(message!=null && message1!=null && b.equals(message) && c.equals(message1)){ startActivity(intent1); } else{ textView.setText("Password or Username is Wrong"); } }
2. 修复MainActivity3的空指针问题
调用equals前先做空安全校验,或者用常量在前的写法规避空指针:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); Intent intent= getIntent(); String number = intent.getStringExtra(MainActivity2.extraint); FrameLayout lay= findViewById(R.id.frames); // 常量写在equals前面,即使number为null也不会触发空指针 if("1".equals(number)) { lay.setVisibility(View.INVISIBLE); } // 也可以选择先判空的写法: // if(number != null && number.equals("1")){ // lay.setVisibility(View.INVISIBLE); // } }
onCreate中添加if判断的正确写法
onCreate本质是Activity的生命周期方法,if判断的语法和Java常规写法一致,仅需要注意安卓平台的特殊规则:
- 所有逻辑必须放在
super.onCreate(savedInstanceState)和setContentView()之后,否则调用findViewById获取控件会返回null,后续逻辑报错 - 所有从Intent、资源、控件获取的变量都要先做空安全校验,再做逻辑判断,避免空指针崩溃
- 不要在onCreate里做耗时操作,若if判断包含大量计算,需放到子线程执行
正确的示例结构如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 第一步:加载布局 setContentView(R.layout.activity_xxx); // 第二步:初始化控件、获取传递参数 TextView tv = findViewById(R.id.xxx); Intent intent = getIntent(); String value = intent.getStringExtra("key"); // 第三步:编写if判断逻辑 if(value != null && value.equals("test")){ tv.setText("匹配成功"); }else{ tv.setText("匹配失败"); } }
内容的提问来源于stack exchange,提问作者user16774956
相关产品推荐
相关产品推荐

