防止 android 凌空从缓存图像

发布时间: 2016/10/10 21:10:54
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有凌空网络 ImageView ,问题是图像内的更改时切断凌空仍然使用缓存的图像这是旧,反正是有凌空了解服务器内部改变那形象? 或如果有不是,如何防止它从缓存?

这里是我当前的代码︰

private void networkImage(){
    String url = "http://example.com/profilePictures/"+username+".jpg";

    networkImageView = (NetworkImageView) findViewById(R.id.IBProfilePicture);
    networkImageView.setOnClickListener(this);

    RequestQueue networkQueue = Volley.newRequestQueue(getApplicationContext());
    networkQueue.getCache().remove(url);
    networkQueue.getCache().clear();
    ImageLoader networkImageLoader = new ImageLoader(networkQueue, new ImageLoader.ImageCache() {
        @Override
        public Bitmap getBitmap(String url) {
            return null;
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {

        }
    });

    networkImageView.setImageUrl(url,networkImageLoader);
}

解决方法 1:

  1. 如果可以的话,请更改服务器的缓存策略。
  2. 您可以使用 request.setShouldCache(false) 来禁用高速缓存的请求。

方法 2 你可以通过重写 ImageLoader.makeImageRequest() ;

public class NoCacheImageLoader extends ImageLoader {
    public NoCacheImageLoader(RequestQueue queue, ImageCache imageCache) {
        super(queue, imageCache);
    }

    @Override
    protected Request<Bitmap> makeImageRequest(String requestUrl, int maxWidth, int maxHeight, ImageView.ScaleType scaleType, String cacheKey) {
        Request<Bitmap> request =  super.makeImageRequest(requestUrl, maxWidth, maxHeight, scaleType, cacheKey);
        // key method
        request.setShouldCache(false);
        return request;
    }
}

然后使用 NoCacheImageLoader 而不是 ImageLoader 。现在,它不会进磁盘缓存图像。

顺便问一下你应该仍然添加时间戳到 url,因为如果 url 是一样的 NetworkImageView 将不会再加载图像。

赞助商