从另一个Activity获取布尔值触发NullPointerException(Kotlin)
解决Intent传递布尔值时的NullPointerException问题
问题根源
你的代码存在两个核心错误,直接导致了空指针异常和数据传递失效:
- 过早访问Intent:在
MainActivity的类成员位置直接调用intent.getBooleanExtra,此时Activity生命周期尚未走到onCreate阶段,intent对象还未初始化,必然触发NullPointerException。 - 错误的返回逻辑:
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
相关产品推荐
相关产品推荐

