Intent传值异常:A→B→C路径下C获取数据为null
问题分析与解决办法
核心原因
你的问题本质是Intent的参数只在单次跳转的两个Activity之间有效:
- 当A直接跳C时,你把
sex塞进了跳C的Intent里,C自然能拿到; - 走A→B→C的路径时,A传给B的
sex只保存在B自己的Intent中,但B跳C时,你新建了一个空的Intent,没把sex传过去,所以C里拿这个值就是null。
具体解决步骤
1. 在中间页面B(GoalsActivity)接力传参
你需要在B页面把A传来的sex参数,再传递给C页面。假设GoalsActivity跳QuizActivity2的代码如下,修改成这样:
class GoalsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_goals) // 先拿到A传过来的sex val receivedSex = intent.getStringExtra("sex") // 跳转到C的按钮点击事件 val btnToQuiz = findViewById<Button>(R.id.your_btn_id) btnToQuiz.setOnClickListener { val intentToC = Intent(this, QuizActivity2::class.java) // 把sex传给C intentToC.putExtra("sex", receivedSex) // 别忘了把B自己的参数(比如muscles、goal)也一起传过去 intentToC.putExtra("muscles", "你的muscles参数值") intentToC.putExtra("goal", "你的goal参数值") startActivity(intentToC) } } }
2. 优化C页面的参数获取逻辑
你现在直接用.toString()处理null的话会变成字符串"null",建议改成空值兜底:
// 替换原有的参数获取代码 val muscles = intent.getStringExtra("muscles") ?: "" val gender = intent.getStringExtra("sex") ?: "" val goal = intent.getStringExtra("goal") ?: ""
其他可选方案
如果需要在多个页面共享数据,除了Intent接力,还可以选这些方式:
- ViewModel:适合在页面生命周期内共享临时数据,不会因为页面重建丢失;
- SharedPreferences:适合存储持久化的简单键值对数据;
- 单例类:存全局临时数据,但要注意避免内存泄漏。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

