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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:10:32