Android使用Intent.putExtras传值后MainActivity接收不到参数问题求助
问题根因定位
- 核心错误:传参与取参的键名不匹配
你在传入参数时用的键是"params",接收时用的键是"param1",字符串完全不一致,自然取不到对应值。 - 潜在问题:如果你的
MainActivity配置了singleTop/singleTask/singleInstance等非标准启动模式,且跳转时MainActivity已经在任务栈中存在,系统不会重新创建MainActivity实例,onCreate方法不会触发,只会回调onNewIntent方法,此时getIntent()默认返回的是首次启动时的旧Intent,也会导致取不到新传的参数。
修复方案
- 统一键名,优先定义公共常量避免手写错误
// 建议在跳转源类或者MainActivity中定义统一的参数键常量 public static final String EXTRA_PARAMS = "params";
传入参数时使用常量(也可以省略单独创建Bundle的步骤,直接调用Intent原生方法更简洁):
trigger.setOnClickListener( v-> { Intent intent = new Intent(this, MainActivity.class); intent.putExtra(EXTRA_PARAMS, "okay"); startActivityForResult(intent,0); });
接收参数时也用同一个常量:
// onCreate中接收 Intent intent = getIntent(); String getData = intent.getStringExtra(EXTRA_PARAMS); if(getData != null) { Log.i(TAG, "face detect message " + getData); }
- 适配单例启动模式场景
如果MainActivity用了单例启动模式,新增onNewIntent方法处理新参数:
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); // 更新当前Activity持有的Intent为新传入的Intent setIntent(intent); // 重新执行参数读取逻辑即可 String getData = getIntent().getStringExtra(EXTRA_PARAMS); if(getData != null) { Log.i(TAG, "face detect message " + getData); } }
内容的提问来源于stack exchange,提问作者user14176266
相关产品推荐
相关产品推荐

