Я разрабатываю приложение для Android, которое сохраняет изображения транспортных средств (снятые с камеры устройства) в хранилище устройства (/data/files/image1.jpg, /data/files/image2.jpg и т. д.). сделано правильно, но я не могу их удалить, если мне больше не нужно конкретное изображение (например, я удаляю автомобиль из базы данных SQLite). Все транспортные средства «представлены» на экране Jetpack Compose с возможностью компоновки «Карта» и «Ленивая колонка». У каждой карты есть кнопка «Удалить», которая работает хорошо, она удаляет карту, и изменение состояния правильно обновляет пользовательский интерфейс, за исключением того, что если я удалю карту между двумя другими, карта после удаленной вместо этого отобразит фотографию удаленной. своей собственной фотографии. Я читал, что это может быть как-то связано с попыткой удалить файл, который используется, но сначала я удаляю запись базы данных (которая имеет поле «путь к изображению» типа ТЕКСТ), поэтому я бы не стал использовать этого изображения сейчас, и теоретически я уже должен иметь возможность удалить файл изображения из хранилища устройства.
Я создал функцию в 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}")
}
}
}
Заранее большое спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/791 ... ing-kotlin