Я пытаюсь реализовать кэширование изображений в своем приложении для 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
Почему при получении снимка возвращается ноль, хотя изображение успешно кэшируется? ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему при получении снимка возвращается ноль, хотя изображение успешно кэшируется?
Anonymous » » в форуме JAVA - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Вызов getDrawable несколько раз подряд, кэшируется и оптимизируется ли рисуемый объект?
Anonymous » » в форуме Android - 0 Ответы
- 32 Просмотры
-
Последнее сообщение Anonymous
-