【问题标题】:Locally Store Images Loaded with Coil?本地存储加载线圈的图像?
【发布时间】:2021-11-20 08:13:42
【问题描述】:

所以我使用 Coil 图像加载库通过指定图像 URL 从 API 加载图像。但是,当没有互联网连接时,我希望能够在我的应用程序中看到这些图像。 Coil 库中是否有对这种东西的支持,或者我们应该自己将这些图像存储在本地?

如果是这样,我们是否应该使用 Coil 将该图像 URL 转换为位图,然后将其保存在本地?

更新:

我正在使用带有 Jetpack Compose 的库。

 val painter = rememberImagePainter("$BASE_URL${item.image}") {
        memoryCachePolicy(policy = CachePolicy.ENABLED)
    }

【问题讨论】:

标签: android kotlin offline-caching


【解决方案1】:

Coil 确实将图像缓存在设备磁盘上,以便能够离线使用它们,但前提是图像请求的响应标头包含允许 Coil 执行此操作的缓存控制标头。原因是 Coil 使用了 OkHttp 提供的磁盘缓存,而不是自己的缓存实现。

检查图像请求的响应标头并查找标头,例如 Cache-Control: no-cache, no-store, max-age=0, must-revalidate, ... 和/或 Pragma: no-cache (所有缓存控制头见:Cache-Control MDN Web docs

如果存在这些,OkHttp 将不会将响应存储在磁盘缓存中。 您可以通过更改 api 配置以允许缓存图像(如果您有权访问)或提供更改响应标头的 OkHttp 拦截器来解决此问题。见:Interceptors: Rewriting Responses

【讨论】:

  • 哇!谢谢你,我已经添加了 Cache-Control 标头并且它有效。还不知道那种类型的标题。 :)
猜你喜欢
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
相关资源
最近更新 更多