从图库转换图片为Bitmap时触发NullPointerException问题求助
解决图库图片转Bitmap时的NullPointerException问题
问题根源在于你重复使用了同一个InputStream:创建ExifInterface时已经把流的读取指针移到了末尾,后续调用BitmapFactory.decodeStream(inputStream)时,流里已经没有数据可读,所以返回null,触发空指针异常。
修正方案
为ExifInterface和BitmapFactory分别打开独立的输入流(部分流不支持重置指针,重新打开是更稳妥的做法)。以下是修改后的代码:
else if(requestCode == GALLERY && resultCode == Activity.RESULT_OK && data != null) { val imgData = data.data ?: return // 替代!!,避免空指针 // 为读取Exif信息单独打开输入流 requireContext().contentResolver.openInputStream(imgData)?.use { exifStream -> val exif = ExifInterface(exifStream) val rotation = exif.getAttributeInt( ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED ) val rotationInDegrees = exifToDegrees(rotation) // 重新打开输入流用于解码Bitmap requireContext().contentResolver.openInputStream(imgData)?.use { bitmapStream -> val bitmap = BitmapFactory.decodeStream(bitmapStream) bitmap?.let { // 判空处理,避免后续空指针 val bitmapReturn = rotateBitmap(it, rotationInDegrees) bitmapReturn?.let { rotated -> listImg[aktuellesBild] = rotated adapter.notifyItemChanged(aktuellesBild) } } } } }
额外注意事项
- 避免使用
!!强制非空,改用?:空安全运算符或者?.let做判空处理,减少崩溃风险 - 用
use函数自动管理输入流的关闭,避免资源泄漏 - 可以添加Bitmap解码失败的提示逻辑,比如用Toast告知用户图片无法加载
内容的提问来源于stack exchange,提问作者Captai-N
相关产品推荐
相关产品推荐

