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) 

Любая помощь, Как мне заменить растровое изображение в кэше, чтобы он загружал новый загруженный файл изображения? Я уверен, что файл изображения был загружен на сервер, потому что я могу открыть его и увидеть его замененный. Единственный способ, которым он работает сейчас, - это закрыть приложение и снова открыть его.

0 ответов

Другие вопросы по тегам