Android Kotlin:如何处理从Bundle中接收空值的问题
解决Fragment Bundle读取可空字符串的空指针问题
你的错误根源是强制非空转换:arguments?.getString(KEY_CONTACT_P_NUM) as String 中,as String会强制把可空的String?转成非空String,一旦arguments为空或者对应key的值为空,就会抛出空指针异常。
下面是几种正确处理空值的方式:
1. 直接接收为可空类型
如果业务逻辑允许pNum为空,直接声明为String?类型即可,后续使用时通过?.安全调用或者?:处理空分支:
val pNum: String? = arguments?.getString(KEY_CONTACT_P_NUM)
2. 使用安全转换操作符
用as? String替代as String,它会在转换失败(即值为空)时返回null,不会崩溃:
val pNum = arguments?.getString(KEY_CONTACT_P_NUM) as? String
3. 给空值设置默认值
如果业务需要pNum必须是非空的,可以用Elvis操作符?:给空值指定默认值(比如空字符串):
val pNum: String = arguments?.getString(KEY_CONTACT_P_NUM) ?: ""
另外还要注意你newInstance方法里的笔误:方法参数是pNum,但bundleOf里传的是phoneNumber,这会导致参数根本没传对,修正后的代码:
companion object { private const val KEY_CONTACT_P_NUM = "contact_p_num" fun newInstance(pNum: String?): GITFragment { return GetInTouchResponseFragment().apply { arguments = bundleOf(KEY_CONTACT_P_NUM to pNum) } } }
内容的提问来源于stack exchange,提问作者BRDroid
相关产品推荐
相关产品推荐

