Я пытаюсь реализовать кэширование изображений в своем приложении для Android с помощью Coil. Цель состоит в том, чтобы обеспечить кэширование изображений как в памяти, так и на диске, а затем получить кэшированное изображение как Uri. Однако я столкнулся с проблемой, когда при попытке получить снимок кэшированного изображения путь оказывается нулевым.
Вот моя функция getImage:
private suspend fun getImage(imageUri: String, force: Boolean): String {
Log.d("TAG", "getImage: $imageUri")
// Explicitly set a custom cache key
val cacheKey = imageUri.hashCode().toString()
// Create the ImageRequest
val request = ImageRequest.Builder(context).diskCachePolicy(CachePolicy.ENABLED)
.memoryCachePolicy(CachePolicy.ENABLED)
.data(imageUri)
.diskCacheKey(cacheKey).memoryCacheKey(cacheKey) // Ensure the key is not null
.build()
// Ensure the image is cached
with(context.imageLoader) {
if (force) {
diskCache?.remove(cacheKey)
memoryCache?.remove(MemoryCache.Key(cacheKey))
Log.d("TAG", "Cache cleared for key: $cacheKey")
}
val result = execute(request)
if (result is ErrorResult) {
Log.e("TAG", "Image caching failed: ${result.throwable}")
throw result.throwable
} else {
Log.d("TAG", "Image successfully cached with key: $cacheKey")
}
}
// Retrieve the cached image
val path = try {
context.imageLoader.diskCache?.openSnapshot(cacheKey)?.use { snapshot ->
val imageFile = snapshot.data.toFile()
Log.d("TAG", "Image file created: ${imageFile.absolutePath}")
val contentUri = getUriForFile(
context,
"dev.jay.momentbox.widget.fileprovider",
imageFile
)
Log.d("TAG", "Content URI created: $contentUri")
contentUri.toString()
}
} catch (e: Exception) {
Log.e("TAG", "Error retrieving image from cache: $imageUri", e)
null
}
// Log and return result
if (path == null) {
Log.e("TAG", "Path is null; image not found in cache.")
throw IllegalArgumentException("Couldn't find cached file for the provided URI")
} else {
Log.d("TAG", "Retrieved image path: $path")
}
return path
}
Вот вывод журнала:
2024-11-15 21:24:10.216 9155-9227 TAG dev.jay.momentbox D getImage: content://media/picker_get_content/0/com.android.providers.media.photopicker/media/1000015329
2024-11-15 21:24:10.217 9155-9198 WM-Processor dev.jay.momentbox D Work WorkGenerationalId(workSpecId=8c15c3a4-df4b-4828-9429-79f8d50901f5, generation=0) is already enqueued for processing
2024-11-15 21:24:10.505 9155-9227 TAG dev.jay.momentbox D Image successfully cached with key: -614239324
2024-11-15 21:24:10.512 9155-9227 TAG dev.jay.momentbox E Path is null; image not found in cache.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ears-to-be
Почему при получении снимка возвращается ноль, хотя изображение успешно кэшируется? ⇐ JAVA
Программисты JAVA общаются здесь
1731686453
Anonymous
Я пытаюсь реализовать кэширование изображений в своем приложении для Android с помощью Coil. Цель состоит в том, чтобы обеспечить кэширование изображений как в памяти, так и на диске, а затем получить кэшированное изображение как Uri. Однако я столкнулся с проблемой, когда при попытке получить снимок кэшированного изображения путь оказывается нулевым.
Вот моя функция getImage:
private suspend fun getImage(imageUri: String, force: Boolean): String {
Log.d("TAG", "getImage: $imageUri")
// Explicitly set a custom cache key
val cacheKey = imageUri.hashCode().toString()
// Create the ImageRequest
val request = ImageRequest.Builder(context).diskCachePolicy(CachePolicy.ENABLED)
.memoryCachePolicy(CachePolicy.ENABLED)
.data(imageUri)
.diskCacheKey(cacheKey).memoryCacheKey(cacheKey) // Ensure the key is not null
.build()
// Ensure the image is cached
with(context.imageLoader) {
if (force) {
diskCache?.remove(cacheKey)
memoryCache?.remove(MemoryCache.Key(cacheKey))
Log.d("TAG", "Cache cleared for key: $cacheKey")
}
val result = execute(request)
if (result is ErrorResult) {
Log.e("TAG", "Image caching failed: ${result.throwable}")
throw result.throwable
} else {
Log.d("TAG", "Image successfully cached with key: $cacheKey")
}
}
// Retrieve the cached image
val path = try {
context.imageLoader.diskCache?.openSnapshot(cacheKey)?.use { snapshot ->
val imageFile = snapshot.data.toFile()
Log.d("TAG", "Image file created: ${imageFile.absolutePath}")
val contentUri = getUriForFile(
context,
"dev.jay.momentbox.widget.fileprovider",
imageFile
)
Log.d("TAG", "Content URI created: $contentUri")
contentUri.toString()
}
} catch (e: Exception) {
Log.e("TAG", "Error retrieving image from cache: $imageUri", e)
null
}
// Log and return result
if (path == null) {
Log.e("TAG", "Path is null; image not found in cache.")
throw IllegalArgumentException("Couldn't find cached file for the provided URI")
} else {
Log.d("TAG", "Retrieved image path: $path")
}
return path
}
Вот вывод журнала:
2024-11-15 21:24:10.216 9155-9227 TAG dev.jay.momentbox D getImage: content://media/picker_get_content/0/com.android.providers.media.photopicker/media/1000015329
2024-11-15 21:24:10.217 9155-9198 WM-Processor dev.jay.momentbox D Work WorkGenerationalId(workSpecId=8c15c3a4-df4b-4828-9429-79f8d50901f5, generation=0) is already enqueued for processing
2024-11-15 21:24:10.505 9155-9227 TAG dev.jay.momentbox D Image successfully cached with key: -614239324
2024-11-15 21:24:10.512 9155-9227 TAG dev.jay.momentbox E Path is null; image not found in cache.
Подробнее здесь: [url]https://stackoverflow.com/questions/79193118/why-is-the-snapshot-retrieval-returning-null-even-though-the-image-appears-to-be[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия