You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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常规写法一致,仅需要注意安卓平台的特殊规则:

  1. 所有逻辑必须放在super.onCreate(savedInstanceState)和setContentView()之后,否则调用findViewById获取控件会返回null,后续逻辑报错
  2. 所有从Intent、资源、控件获取的变量都要先做空安全校验,再做逻辑判断,避免空指针崩溃
  3. 不要在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:54:02