Android-Kotlin:BitmapFactory抛出空指针异常,代码问题排查
这段Kotlin代码存在的问题及优化建议
让我帮你梳理下这段代码里的几个问题,都是Android/Kotlin开发中容易踩的坑:
非空断言(
!!)的危险使用
代码里的bitmaps!!和imageID!!用了非空断言,如果这两个集合对象在调用这个方法时还没初始化(处于null状态),会直接抛出NullPointerException,导致程序崩溃。
优化建议:要么提前确保bitmaps和imageID被初始化(比如声明时就赋值mutableListOf()),要么用安全调用结合空判断,比如:bitmaps?.add(...) ?: run { // 处理bitmaps为null的情况,比如初始化或者抛出友好异常 }循环写法不够Kotlin化
用for (i in 0 until imageList.size)然后通过get(i)取元素的方式,是Java风格的写法。Kotlin里直接遍历集合元素更简洁易读,还能避免索引操作的潜在错误:for (imageItem in imageList) { val imageBase64 = imageItem.image val imageId = imageItem.imageIndex.toInt() // ... 后续逻辑 }缺失关键异常处理
代码里有好几处可能抛出异常的操作,但完全没有处理:Integer.parseInt(imageList.get(i).imageIndex):如果imageIndex不是合法的整数字符串,会抛出NumberFormatException;Base64.decode(imageDataBytes,0):如果传入的不是有效的Base64格式字符串,会抛出异常;BitmapFactory.decodeByteArray(...):如果解码失败会返回null,直接添加到bitmaps里可能导致后续操作出错(如果bitmaps是MutableList<Bitmap>类型,还会编译错误)。
优化建议:用try-catch块包裹这些危险操作,或者用Kotlin的安全转换函数,比如imageItem.imageIndex.toIntOrNull()来替代Integer.parseInt,避免直接抛出异常。
变量命名与注释问题
- 变量
iD不符合Kotlin驼峰命名规范,应该改为imageId; - 变量
imageDataBytes其实存储的是Base64字符串,不是字节数组,命名有误导性,建议改为imageBase64; - 注释
//Initialize with empty data和代码实际行为不符,代码是在往集合里填充数据,不是初始化空数据,建议修改注释或者删除。
- 变量
内容的提问来源于stack exchange,提问作者skIndia
相关产品推荐
相关产品推荐

