Как и в заголовке, мне нужно обновить изображение, когда я получил тот же URL-адрес, этот URL-адрес всякий раз, когда вызывается, возвращает случайное изображение.
Получил код, который работает, когда URL отличается:
var model by remember { mutableStateOf(URL) }
AsyncImage(
model = model,
contentDescription = "",
modifier = Modifier.clickable(onClick = {
model = newUrl
})
)
Но мне нужно вызвать тот же URL, который возвращает случайное изображение:
var model by remember { mutableStateOf(URL) }
AsyncImage(
model = model,
contentDescription = "",
modifier = Modifier.clickable(onClick = {
model = URL //this is what I need
})
)
Вы можете проверить этот пример:
URL = https://cataas.com/cat вы будете видеть случайного кота каждый раз, когда обновляете страницу.
Если вам нужно перезагрузить изображение с тем же URL-адресом, вы можете сделать что-то вроде этого в Coil:
var requestId by remember { mutableStateOf(0) }
val imageRequest = ImageRequest.Builder(LocalContext.current)
.data(data)
.memoryCachePolicy(CachePolicy.DISABLED)
.diskCachePolicy(CachePolicy.DISABLED)
.setParameter("requestId", requestId, memoryCacheKey = null)
.build()
AsyncImage(
model = imageRequest,
contentDescription = "",
modifier = Modifier.clickable(onClick = {
requestId++
})
)
Идея setParameter взята из этого выпуска: https://github.com/coil-kt/coil/issues/884. Изменение параметра приводит к повторному выполнению запроса катушкой. Вы также должны отключить кеш, потому что, в отличие от проблемы, в этом случае запрос был выполнен успешно.
Вы правы, проблема работает с неудачным запросом, мы используем это в нашем приложении, и оно работает хорошо, и я просто предположил, что это будет работать и для успешных запросов. Попробовал сейчас и обнаружил, что вам также нужно отключить кеш. Обновил мой ответ.
Кроме того, отключение кеша в этом примере в любом случае является хорошей идеей, я думаю, вы не хотите накапливать изображения кошек в своей памяти :D
Да, в этом примере мне не нужен кеш :D У меня нет опыта с кешированием в памяти или на диске.. Если понять, кеширование, если оно включено, сохранит изображение в памяти, и оно будет потеряно, когда я убью приложение или что? Это почему кеш важен? Пожалуйста, поправьте меня, если я ошибаюсь, пытаясь понять, как работает кэширование.
Да, у катушки есть два типа кэширования, память и диск. Память для всех изображений, диск только для изображений, загруженных из Интернета. Кое-что об этом можно прочитать здесь: coil-kt.github.io/coil/image_loaders/#caching Как только вы загрузите изображение, оно будет сохранено в кэше диска, и вам не придется загружать его снова, даже после того, как приложение будет убито. В конечном итоге его можно заменить другими изображениями в кеше, если их у вас много.
В вашем случае это не имеет смысла, потому что вы получаете разные изображения для одного и того же URL-адреса, но катушка загружает изображение в первый раз, сохраняет его на диск, а во второй раз, когда вы запрашиваете тот же URL-адрес, он просто обслуживает его с диска - и ты не хочешь этого.
Теперь более понятно, что такое кеширование :-)
Этот код не работает. Я проверю это по ссылке.