Android + Picasso: changing URL cache expiration

2019-01-11 11:45发布

I am using Picasso to download and display images in views all accros my application. Those images are changing very rarely (they are considered valid for a few months).

Is there a simple way to ask Picasso (or the underlying okHttp) to keep those images on disc for this much time?

2条回答
Luminary・发光体
2楼-- · 2019-01-11 12:19

Disk caching happens "below" Picasso inside the HTTP client. In fact, this process is completely transparent. We never explicitly ask for a cached-version or an internet-version, the HTTP client will make the decision internally and do the right thing.

Because we opted to leverage the HTTP client for caching, we're offered very little control over how the caching actually happens. To answer your question, no, there is no way to tell Picasso (or OkHttp) to cache an image for longer than its headers allow.

查看更多
beautiful°
3楼-- · 2019-01-11 12:19

I solved it with a Home-made cache, the trick is to add a parameter to the URL that is not used, but making each URL different every X minutes

Calendar cal2 = Calendar.getInstance();
long d = cal2.getTimeInMillis();
int extra =  (int) Math.ceil(d/ (10*60*1000));    // 10 minutes cache

Picasso.with(getBaseContext())
            .load("http://www.myurl.cat/myimage.png&extra=" + extra)
            .placeholder(R.drawable.graphicLoading)
            .error(R.drawable.graphicLoadingError)
            .into(bottomGraphic);
查看更多
登录 后发表回答