Ivan Wooll
Ivan Wooll

Reputation: 4323

Volley NetworkImageView clear cached image

Does anybody know if it is possible to clear the cached image from a single NetworkImageView using Googles Volley library?

I have an avatar image in a NetworkImageView and would like to show the new image once I have uploaded it to the server. At the moment if I do profileImg.setImageUrl("myUrl", mImageLoader); I get the cached image.

Upvotes: 8

Views: 7083

Answers (6)

h.hejabi
h.hejabi

Reputation: 85

in the LruBitmapCache you should do diable put(url, bitmap) :

 @Override
    public void putBitmap(String url, Bitmap bitmap) {
       // put(url, bitmap);
    }

by this way every time you call the volley method image don't save to catch

Upvotes: 1

user3275601
user3275601

Reputation: 13

I have created volleySingleton Class. I load image from ImageLoader . I have a requirement of deleting the cache but not able do that. Used all these three method

1) Deleting cache for particular URL : Use remove() to delete cache of an URL.

VolleySingleton.getInstance().getRequestQueue().getCache().remove(ImageUrl); 2) Deleting all the cache :

VolleySingleton.getInstance().getRequestQueue().getCache().clear();

3) VolleySingleton.getInstance().getRequestQueue().getCache().invalidate(ImageUrl,true);

I have tried all of them but cashe is not getting deleted

Upvotes: 0

Sileria
Sileria

Reputation: 15632

If you create the cache like this:

RequestQueue requests = Volley.newRequestQueue( context );
BitmapCache cache = new BitmapCache(cacheSize);
ImageLoader loader = new ImageLoader( requests, cache );

You can clear all like this:

public void clear () {
    cache.evictAll();
    requests.getCache().clear();
}

Upvotes: 0

Ivan Wooll
Ivan Wooll

Reputation: 4323

So to belatedly answer my own question. I ended up taking a different approach to ensure that I always get the latest copy of an avatar image and it turned out to be very simple.

Instead of trying to clear out an individual image from the cache I use the following method.

int time = (int) (System.currentTimeMillis());//gets the current time in milliseconds
String myUrl = "www.mySite.com?timestamp=" + String.ValueOf(time);
profileImg.setImageUrl("myUrl", mImageLoader);

What this does is to append an imaginary parameter to the url I call to get the image with a current timestamp. This guarantees that I am always making a call to a unique url and so therefore am always getting the most up-to-date version of that image.

The beauty of this approach is that it is not limited to Volley and can be used however you choose to make network calls.

Upvotes: 3

Siddharth_Vyas
Siddharth_Vyas

Reputation: 10100

Check this out :

1) Turning off cache : If you want disable the cache for a particular url, you can use setShouldCache() method as below.

StringRequest stringReq = new StringRequest(....);
stringReq.setShouldCache(false);

2) Deleting cache for particular URL : Use remove() to delete cache of an URL.

yourRequestQueue.getCache().remove(url);

3) Deleting all the cache :

yourRequestQueue.getCache().clear(url);

Also, check out this link here.

Hope this helps.

Upvotes: 5

krunal patel
krunal patel

Reputation: 2499

  To turn off the cache:

1
request.setShouldCache(false);
to remove the cache for a specific request:

1
queue.getCache().remove(url);
to clear all cache:

1
queue.getCache().clear();
to invalidate the cache: this will allow to display the cached data until the response is received. When the response is received, it will automatically override the cached data.

1
queue.getCache().invalidate(url, true);

    for more details you can refer to the 
    url:http://androidresearch.wordpress.com/2014/02/01/android-volley-tutorial/

Upvotes: 0

Related Questions