Kotlin与Anko中NullPointerException问题咨询:新手不解空安全失效
解惑你的Kotlin空安全NPE问题
嗨,作为Kotlin和Anko的初学者遇到这种情况太正常了,咱们一步步拆解问题根源:
你代码里的问题出在**intent.extras本身可能为null**,但你直接用了intent.extras["Key"]——这相当于在一个可能为null的Bundle?对象上直接调用get操作符(也就是[]),而没有用Kotlin的安全调用?.,这直接绕过了空安全检查,自然触发了NullPointerException!
先给你修正后的正确写法:
// 先对intent.extras做安全调用,再逐层处理取值和类型转换 val displayValue = intent.extras?.get("Key")?.toString() textView(displayValue ?: "Nothing") .lparams(wrapContent, wrapContent)
或者用更简洁的方式,直接利用Bundle的getString方法:
val displayValue = intent.extras?.getString("Key") ?: "Nothing" textView(displayValue) .lparams(wrapContent, wrapContent)
再给你理清楚为什么原来的代码会炸:
intent.extras的返回类型是Bundle?,当你的Intent没有携带任何额外数据时,它就是null。- 你写的
intent.extras["Key"]没有加?.,相当于直接在null对象上调用方法,这完全跳过了Kotlin的空安全防护,直接抛出NPE。 - 后面的
?: "Nothing"其实根本没机会生效,因为前面的intent.extras["Key"]已经先触发异常了。
简单说就是:你只给toString()加了安全调用,却忘了给intent.extras的访问也加安全调用,这就是问题的核心~
内容的提问来源于stack exchange,提问作者Kevin Zheng
相关产品推荐
相关产品推荐

