You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从图库转换图片为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:50:53