我正在开发一个Android应用程序,其中显示了大量的图像。我使用Picasso来加载图像并使用其默认的缓存策略。现在我想要的是修改缓存,假设如果用户今天看到了一张图像,它将在缓存中保留7天,每次用户访问该特定页面时,毕加索都会从缓存中加载图像,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()我想让图像在缓存中保存一周。
发布于 2019-07-16 19:32:11
创建自定义OkHttp interceptor并添加到毕加索。
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。更多信息
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();https://stackoverflow.com/questions/57055984
复制相似问题