Android Studio中拆箱操作可能引发NullPointerException的问题咨询
解决Android中Intent取值拆箱可能触发空指针的警告问题
嘿,我来帮你搞定这个Android Studio里的黄色警告!
你遇到的这个警告,本质是因为getIntent().getExtras().get(EXTRA_DRINKID)返回的是Object类型,你把它强转成Integer后又自动拆箱成int——但如果这个get()方法返回null的话,自动拆箱就会抛出NullPointerException,Android Studio提前帮你察觉到了这个潜在风险,所以弹出了警告。
给你几个实用的解决办法,选一个适合你的就行:
安全拆箱法
先把取值结果存到Integer类型的变量里,判断非空后再转成int,避免直接拆箱的风险:Integer drinkIdObj = (Integer) getIntent().getExtras().get(EXTRA_DRINKID); // 这里的0可以换成你业务逻辑里的默认饮品ID int drinkId = drinkIdObj != null ? drinkIdObj : 0; Drink drink = Drink.drinks[drinkId];用Intent专属API直接获取int值
其实Intent提供了更直接的getIntExtra()方法,既能直接拿到int类型,还能指定默认值,完全不用手动强转和拆箱,代码更简洁安全:// 第二个参数是默认值,根据你的需求修改就行 int drinkId = getIntent().getIntExtra(EXTRA_DRINKID, 0); Drink drink = Drink.drinks[drinkId];严谨的空值检查法
如果想做到万无一失,可以先判断Bundle是否为空,再取值,彻底规避空指针风险:Bundle extras = getIntent().getExtras(); int drinkId = 0; if (extras != null) { // 同样可以指定默认值 drinkId = extras.getInt(EXTRA_DRINKID, 0); } Drink drink = Drink.drinks[drinkId];
个人比较推荐第二种或者第三种方法,既符合Android的API设计习惯,又能彻底消除警告,代码可读性也更高。
内容的提问来源于stack exchange,提问作者ChuckZHB
相关产品推荐
相关产品推荐

