android - 本地存储加载线圈的图像?
问题描述
所以我使用 Coil 图像加载库通过指定图像 URL 从 API 加载图像。但是,当没有互联网连接时,我希望能够在我的应用程序中看到这些图像。Coil 库中是否有对这种东西的支持,或者我们应该自己将这些图像存储在本地?
如果是这样,我们是否应该使用 Coil 将该图像 URL 转换为位图,然后将其保存在本地?
更新:
我正在使用带有 Jetpack Compose 的库。
val painter = rememberImagePainter("$BASE_URL${item.image}") {
memoryCachePolicy(policy = CachePolicy.ENABLED)
}
解决方案
Coil 确实将图像缓存在设备磁盘上,以便能够离线使用它们,但前提是图像请求的响应标头包含允许 Coil 执行此操作的缓存控制标头。原因是 Coil 使用 OkHttp 提供的磁盘缓存,而不是自己的缓存实现。
检查图像请求的响应标头并查找诸如 Cache-Control: no-cache, no-store, max-age=0, must-revalidate, ... 和/或 Pragma: no-cache 之类的标头(对于所有缓存控制标头请参阅:Cache-Control MDN Web 文档)
如果存在这些,OkHttp 将不会将响应存储在磁盘缓存中。您可以通过更改 api 配置以允许缓存图像(如果您有权访问)或提供更改响应标头的 OkHttp 拦截器来解决此问题。请参阅:拦截器:重写响应
推荐阅读
- reactjs - 我应该在 React.js 中加密本地存储吗?
- python - 我如何在python中正确调用这个函数?
- javascript - 使用来自服务器的数据填充 Angular 的响应式表单
- reactjs - 如何使用 typescript 扩展 React 库命名空间
- c++ - 使用 string.length() 作为 for 循环的结尾时,C++ 字符串订阅超出范围
- iis - IIS/Pool/Web API / 池下的第一个请求需要很长时间
- java - Java AES GCM javax.crypto.AEADBadTagException:标签不匹配
- c# - CSV 助手。如何在扩展方法中调用 MemberMap 的 ConvertUsing?
- r - 如何在r中找到第一次观察和前两个连续负面观察之间的观察次数
- python - Pyrhon:获取当前月份的月份日期?