1

我正在使用 Volleys 库进行图像下载。当用户更改个人资料图像时,我将图像上传到服务器以替换以前的图像,因为我在数据库中使用用户的 ID,所以指向个人资料图像的链接始终相同。

我对缓存的问题是它无法替换缓存中的位图,在服务器返回成功响应并带有我想替换 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) 

任何帮助,如何替换缓存中的位图以便加载新上传的图像文件?我确定图像文件已上传到服务器,因为我可以打开它并看到它被替换。它现在工作的唯一方法是如果我关闭应用程序并重新打开它。

4

0 回答 0