Kotlin中从Intent获取数据时出现Null值问题
故障原因
你的代码存在两处核心逻辑错误,导致参数传递失败:
- 你构造了两个独立的
Intent实例:声明的i变量、launcher?.launch()方法内直接新建的Intent(this, MainActivity::class.java),你给i添加的Extra参数不会同步到launcher启动的那个Intent中 - 你先执行了启动Activity的操作,之后才给
i设置Extra参数,同时还额外调用了一次startActivity(i),等于连续启动了两个MainActivity实例,最先显示的是launcher启动的无参数实例,所以你读取到的Intent值为Null
修复方案
修正FirstActivity逻辑
如果你使用Activity Result API(即代码中的launcher),统一使用同一个Intent实例,先设置参数再启动,删除冗余的启动代码:
// 构造唯一的Intent实例 val i = Intent(this, MainActivity::class.java) // 先设置传递参数 i.putExtra("key", cold) // 用launcher启动该带参数的Intent launcher?.launch(i) // 删除原代码中多余的 startActivity(i) 调用,避免重复启动Activity
额外校验规则
- 确认你传递的
cold变量是String类型:如果传递的是Boolean、Int等其他类型,接收时需要调用对应的getBooleanExtra("key", 默认值)、getIntExtra("key", 默认值)等方法,不能用getStringExtra - 如果你是在MainActivity已存活的场景下接收新跳转的参数,需要在
onNewIntent回调中主动更新intent = newIntent,否则读取的还是Activity首次启动时的旧Intent值
内容的提问来源于stack exchange,提问作者Dmitry Sergienko
相关产品推荐
相关产品推荐

