我正在开发一个Android应用程序,它将车辆图像(从设备的相机拍摄)存储在设备存储中(/data/files/image1.jpg、/data/files/image2.jpg等),这是正确完成的,但是当我不再需要特定图像时我无法删除它们(例如:我从 SQLite 数据库中删除车辆)。所有车辆均“呈现”在 Jetpack Compose 屏幕中,其中包含“Card”可组合项和“LazyColumn”可组合项。每张卡都有一个“删除”按钮,效果很好,它确实删除了卡,并且状态更改正确更新了 UI,除非我删除另外两张卡之间的卡,删除后的卡会显示已删除卡的照片自己的照片。我读过它可能与尝试删除正在使用的文件有关,但我首先删除数据库记录(其中有一个文本类型的“imagepath”字段),所以我不会使用现在,理论上,我应该能够从设备存储中删除该图像文件。
我在 ViewModel 中创建了一个函数,它可以删除记录和图像文件,但是执行 file.delete() 不会删除它,因为它仍然出现在设备资源管理器中。如果您有任何建议,请告诉我,因为几个月来我一直在努力解决这个问题。
这是我的 ViewModel 中的函数:
fun deleteVehicle(id:Int,fileName:String){
viewModelScope.launch{
val directory = context.filesDir
val file = File(directory, fileName)
try{
repository.deleteVehicle(id)
if(file.exists()){
file.delete()
}
}catch(e:Exception){
Log.e("ViewModel:","Error while trying to delete the vehicle: ${e.message}")
}
}
}
提前非常感谢您。
抱歉,正确的路径是“/data/data/com.alberto.autocontrol2/files”(取自Android Studio的设备资源管理器)。这是从相机拍摄照片并将其保存到设备存储的代码。该代码取自单独的“PantallaRegistrarVehiculo.kt”屏幕(英文为 VehicleRegistrationScreen.kt):
val lanzador = rememberLauncherForActivityResult(
contract = ActivityResultContracts.TakePicturePreview()
) { 位图:位图? -> if (位图!= null) { val file = File(contexto.filesDir, "${viewModel.listaVehiculos.value.size}.jpg") // 或 .png 尝试 { FileOutputStream(文件).use { 输出 -> bitmap.compress(Bitmap.compressFormat.JPEG, 100, out) // 或 PNG } imageBitmap = 位图.asImageBitmap() } catch (e: IOException) { e.printStackTrace() } } }