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