Using Picasso with custom disk cache

android, caching, picasso

Solution

Picasso doesn't have a disk cache. It delegates to whatever HTTP client you are using for that functionality (relying on HTTP cache semantics for cache control). Because of this, the behavior you seek comes for free.

The underlying HTTP client will only download an image over the network if one does not exist in its local cache (and that image isn't expired).

That said, you can create custom cache implementation for `java.net.HttpUrlConnection` (via `ResponseCache` or OkHttp (via `ResponseCache` or `OkResponseCache`) which stores files in the format you desire. I would strongly advise against this, however.

Let Picasso and the HTTP client do the work for you!

You can call `setIndicatorsEnabled(true)` on the `Picasso` instance to see an indicator from where images are being loaded. It looks like this:

If you never see a blue indicator, it's likely that your remote images do not include proper cache headers to enable caching to disk.

Problem

In `Volley` library, the `NetworkImageView` class requires an `ImageLoader` that handles all the image requests by searching for them inside an `ImageCache` implementation, the user is free to choose how the cache should work, the location and the name of the images. I'm switching from `Volley` to `Retrofit`, and for the images I decided to try `Picasso`. With the former library, I had a String parameter in each of my items containing the image URL, then I used `myNetworkImageView.setImageUrl(item.getURL())` and it was able to determine if image was cached on disk. If the image existed in cache folder, the image was loaded, otherwise it was downloaded and loaded. I would like to be able to do the same with Picasso, is it possible with `Picasso` APIs or should I code such feature by myself? I was thinking to download the image to a folder (the cache folder), and use `Picasso.with(mContext).load(File downloadedimage)` on completion. Is this the proper way or are there any best practices?

Original source

Related problems