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

从另一个Activity获取布尔值触发NullPointerException(Kotlin)

解决Intent传递布尔值时的NullPointerException问题

问题根源

你的代码存在两个核心错误,直接导致了空指针异常和数据传递失效:

  1. 过早访问Intent:在MainActivity的类成员位置直接调用intent.getBooleanExtra,此时Activity生命周期尚未走到onCreate阶段,intent对象还未初始化,必然触发NullPointerException。
  2. 错误的返回逻辑:Activity2中用startActivity启动新的MainActivity实例,而非回到原来的MainActivity,原实例永远无法接收到传递的数据。

修改后的代码实现

MainActivity 代码

class MainActivity : AppCompatActivity() {
    // 注册Activity结果回调(AndroidX推荐方式)
    private val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == RESULT_OK) {
            // 安全获取返回的布尔值,默认值为false
            val a = result.data?.getBooleanExtra("a", false) ?: false
            if (a) {
                Toast.makeText(this, "true", Toast.LENGTH_LONG).show()
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btn: Button = findViewById(R.id.button)
        btn.setOnClickListener {
            val intent = Intent(this@MainActivity, MainActivity2::class.java)
            // 通过回调启动Activity2
            startForResult.launch(intent)
        }
    }
}

Activity2 代码

class MainActivity2 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)

        val btn2: Button = findViewById(R.id.button2)
        btn2.setOnClickListener {
            val intent = Intent()
            intent.putExtra("a", true)
            // 设置返回结果
            setResult(RESULT_OK, intent)
            // 关闭当前Activity,回到原MainActivity
            finish()
        }
    }
}

关键修改说明

  • 移除了MainActivity中类成员变量a的提前初始化,将数据获取逻辑移到Activity结果回调中,彻底避免空指针。
  • 使用registerForActivityResult替代传统的startActivityForResult(已废弃),通过回调安全接收返回数据。
  • Activity2不再启动新的MainActivity,而是通过setResult封装数据后调用finish(),直接回到原MainActivity并传递数据。

内容的提问来源于stack exchange,提问作者Sergio Galici

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:15:41