Android 当另一个函数在无问题的情况下使用该文件时,函数中的FileNotFoundException
我得到了这个错误Android 当另一个函数在无问题的情况下使用该文件时,函数中的FileNotFoundException,android,file,exception,kotlin,Android,File,Exception,Kotlin,我得到了这个错误 无法解码流:java.io.FileNotFoundException:/content:/media/external/images/media/119(没有这样的文件或目录) 调用此函数()时,在变量takenImageUri上: 我从之前拍摄照片的片段中获取uri id的方式。这是创建它的实际函数 private fun takePhoto() { val photoResult = fotoapparat?.takePicture()
无法解码流:java.io.FileNotFoundException:/content:/media/external/images/media/119(没有这样的文件或目录)
调用此函数()时,在变量takenImageUri
上:
我从之前拍摄照片的片段中获取uri id的方式。这是创建它的实际函数
private fun takePhoto() {
val photoResult = fotoapparat?.takePicture()
fun getImageUri(inContext: Context, inImage: Bitmap): Uri {
val bytes = ByteArrayOutputStream()
inImage.compress(Bitmap.CompressFormat.PNG, 100, bytes)
val path = MediaStore.Images.Media.insertImage(inContext.contentResolver, inImage, "Title", null)
return Uri.parse(path)
}
photoResult
?.toBitmap()
?.whenAvailable { bitmapPhoto ->
val uriImage = getImageUri(this.context!!, bitmapPhoto!!.bitmap)
val action =
CameraPreviewFragmentDirections.actionCameraPreviewFragmentToApproveImageFragment(uriImage.toString())
findNavController(camera_nav_host_fragment).navigate(action)
}
}
这个文件是一个图像,在调用这个函数之前,我将图像加载到ImageView中,它显示得非常好,所以我知道路径是正确的。如果这个文件存在,为什么它会告诉我这个错误
我收到此错误,无法解码流:java.io.FileNotFoundException:/content:/media/external/images/media/119(没有这样的文件或目录)
这是因为它不是一个文件。您正在将
内容的字符串表示形式
Uri
传递给需要文件系统路径的对象。该Uri
是您(或某物)从MediaStore
获取的值。好的,我知道了,您能给我指出正确的方向吗?我不知道该怎么做conversion@Tsabary:该库似乎不支持从Uri
读取图像。除了修改库之外,没有简单的修复方法。@CommonWare ok感谢您的澄清,这绝对省去了我胡闹的麻烦。我已经添加了上一个片段中的代码,我相信其中有一个文件正在生成。也许我只是把错误的东西传给了下一个片段?如果你的目标是把这个图像放在用户可以访问的地方,那么你最好找一个更好的库,或者把它分叉并对它进行修改。如果这不是您的目标,请摆脱getImageUri()
,并将位图
写入内部存储器(getFilesDir()
或getCacheDir()
上的Context
),然后获得一个可以与该库一起使用的文件。
private fun takePhoto() {
val photoResult = fotoapparat?.takePicture()
fun getImageUri(inContext: Context, inImage: Bitmap): Uri {
val bytes = ByteArrayOutputStream()
inImage.compress(Bitmap.CompressFormat.PNG, 100, bytes)
val path = MediaStore.Images.Media.insertImage(inContext.contentResolver, inImage, "Title", null)
return Uri.parse(path)
}
photoResult
?.toBitmap()
?.whenAvailable { bitmapPhoto ->
val uriImage = getImageUri(this.context!!, bitmapPhoto!!.bitmap)
val action =
CameraPreviewFragmentDirections.actionCameraPreviewFragmentToApproveImageFragment(uriImage.toString())
findNavController(camera_nav_host_fragment).navigate(action)
}
}