android - 缓存图像一周

标签 android picasso

我正在开发一个显示大量图像的 Android 应用程序。我正在使用 Picasso 加载图像并使用其默认缓存策略。现在我想要的是修改缓存,假设如果用户今天看到了一张图片,它将在接下来的 7 天里在缓存中,每次用户访问该特定页面时,Picasso 从缓存中加载图片,7 天后图片将从缓存中清除并再次进行新的缓存。有人,请帮助我,我迷路了。

private void PicassoConfig() {
    Picasso.Builder builder = new Picasso.Builder(this);
    builder.downloader(new OkHttp3Downloader  (this, Constants.MAX_DISK_CACHE_SIZE));
    Picasso built = builder.build();
    Picasso.setSingletonInstance(built);
}

然后

Picasso.get().load(cardList.get(i).
   getImage()).noFade().priority(Picasso.Priority.HIGH).
   placeholder(R.drawable.placehoder_image).
   transform(new com.squareup.picasso.Transformation()

我希望图像在缓存中保留一周。

最佳答案

创建自定义 OkHttp interceptor并添加到 picasso 。

public Interceptor provideCacheInterceptor(final int maxDays) {      
    return new Interceptor() {       
        @Override
        public Response intercept(Chain chain) throws IOException {
            Response response = chain.proceed(chain.request());
            CacheControl cacheControl = new CacheControl.Builder()
                .maxAge(maxDays, TimeUnit.DAYS)
                .build();

            return response.newBuilder()
                .header(Constants.CACHE_CONTROL, cacheControl.toString())
                .build();
        }
    };
}

现在,将其添加到 Gradle

compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2'   

现在将自定义 OkHttpClient 附加到 Picasso。更多信息 here

okhttp3.OkHttpClient okHttp3Client = new okhttp3.OkHttpClient();
int MaxCacheDays = 7; 
okHttp3Client.addNetworkInterceptor(provideCacheInterceptor(MaxCacheDays));  
OkHttp3Downloader okHttp3Downloader = new OkHttp3Downloader(okHttp3Client);  
Picasso picasso = new Picasso.Builder(context)  
        .downloader(new CustomOkHttp3Downloader(client))
        .build();

关于android - 缓存图像一周,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57055984/

相关文章:

android - Picasso 第一次运行不在for循环中调用onBitmapLoaded

android - 图片在 android 的 listview 中显示不正确

android - picasso 加载字节数组

android - HttpURLConnection 不解压缩 Gzip

c# - 尝试将代码块从 C# 转换为 Java (Android)

android 签名 apk/net.sourceforge.jtds 错误

android - 使用 Picasso 设置图像下载(带拦截器)

android - 使用 Picasso 加载图像时显示模糊

Android深度链接动态后缀

android - 入队 onResponse 方法在 android 改造中返回空的 response.body()