How to clear the cache in Android Volley's LRUImageCache for image reloading?
Я использую библиотеку Volleys для загрузки изображений. Когда пользователь меняет изображение профиля, я загружаю его на сервер, чтобы заменить предыдущее изображение, так как я использую идентификатор пользователя в базе данных, ссылка на изображение профиля всегда одинакова.
Проблема, с которой я столкнулся с кешем, заключается в том, что он не может заменить растровое изображение внутри кеша после того, как сервер вернет успешный ответ со ссылкой, которую я хочу заменить изображением в NetworkImageView, но это, похоже, не работает. Вот мой класс LruImageCache
public class LruBitmapCache extends LruCache<String, Bitmap> implements ImageLoader.ImageCache {
public static int getDefaultLruCacheSize() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
return cacheSize;
}
public LruBitmapCache() {
this(getDefaultLruCacheSize());
}
public LruBitmapCache(int sizeInKiloBytes) {
super(sizeInKiloBytes);
}
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
}
@Override
public Bitmap getBitmap(String url) {
return get(url);
}
public void clear(){
this.clear();
}
public void removeBitmap(String key){
this.remove(key);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
put(url, bitmap);
}
}
У меня есть класс в моем AppController, как это
public class AppController extends Application {
public static final String TAG = AppController.class
.getSimpleName();
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private LruImageCache lruBitmapCache;
private static AppController mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
lruBitmapCache = new LruImageCache();
}
public static synchronized AppController getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public ImageLoader getImageLoader() {
getRequestQueue();
if (mImageLoader == null) {
mImageLoader = new ImageLoader(this.mRequestQueue, lruBitmapCache);
}
return this.mImageLoader;
}
public LruImageCache getLruBitmapCache() {
return lruBitmapCache;
}
}
После полной загрузки изображения и возвращения URL-адреса с сервера я попытался использовать эту строку, но она не сработала
Image.setImageUrl(new_url, AppController.getInstance().getImageLoader());
Я также попытался вызвать LruCache, чтобы удалить растровое изображение из кэша, чтобы снова установить изображение, но, похоже, тоже не работает.
AppController.getInstance().getLruBitmapCache().remove(new_url);
Я также пытался загрузить растровое изображение вручную, используя другой метод, чем вставлять в кеш, используя new_url в качестве ключа, но все еще не работает.
AppController.getInstance().getLruBitmapCache().put(new_url, newBitmap)
Любая помощь, Как мне заменить растровое изображение в кэше, чтобы он загружал новый загруженный файл изображения? Я уверен, что файл изображения был загружен на сервер, потому что я могу открыть его и увидеть его замененный. Единственный способ, которым он работает сейчас, - это закрыть приложение и снова открыть его.