Is it possible to change the size of the cache Picasso uses for images?

5.9k views Asked by At

I'm loading images from URLs (http://) with Picasso. Sometimes when i try to "preload" an image using Picasso's fetch() method, the image doesn't get cached. I guess it's because it's size is too big.

Read the answer for this question, but setCache() doesn't seem to be recognized for me, i don't even find it in the Picasso documentation.

Is there any way to change the cache size Picasso uses for bitmaps?

2

There are 2 answers

4
Tushar On BEST ANSWER

You can do:

int maxSize = MAX_CACHE_SIZE;
Picasso picasso = new Picasso.Builder(context)
                              .memoryCache(new LruCache(maxSize))
                              .build();

Picasso uses a Cache interface type to manage the cache. They provide the default implementation, LruCache, which has a constructor that accepts the max size in bytes as an argument.

Seems like the other answer uses the wrong function. It should be memoryCache, not setCache.

6
dasar On

This example use OkHttp as http client for Picasso and setup max Disk cache size and also memory cache.

 // Size in bytes (10 MB)
 private static final long PICASSO_DISK_CACHE_SIZE = 1024 * 1024 * 10;

 // Use OkHttp as downloader
 Downloader downloader = new OkHttpDownloader(getApplicationContext(),
                        PICASSO_DISK_CACHE_SIZE);

  // Create memory cache
  Cache memoryCache = new LruCache(maxSize);

  mPicasso = new Picasso.Builder(getApplicationContext())
                        .downloader(downloader).memoryCache(memoryCache).build();