Почему при получении снимка возвращается ноль, хотя изображение успешно кэшируется?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему при получении снимка возвращается ноль, хотя изображение успешно кэшируется?

Сообщение 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.


Подробнее здесь: https://stackoverflow.com/questions/791 ... ears-to-be
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»