防止android截击缓存图像

防止android截击缓存图像,android,caching,networking,imageview,android-volley,Android,Caching,Networking,Imageview,Android Volley,我有截取网络图像视图,问题是当图像在服务器内更改时,截取仍然使用缓存的图像,这是旧的图像,截取是否理解服务器内更改的图像?或者如果没有,我如何防止它缓存 这是我目前的代码: private void networkImage(){ String url = "http://example.com/profilePictures/"+username+".jpg"; networkImageView = (NetworkImageView) findViewById(R.id.I

我有截取网络图像视图,问题是当图像在服务器内更改时,截取仍然使用缓存的图像,这是旧的图像,截取是否理解服务器内更改的图像?或者如果没有,我如何防止它缓存

这是我目前的代码:

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);
}
尝试以下解决方案:

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());
    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+"?time="+System.currentTimeMillis(),networkImageLoader);
}
尝试以下解决方案:

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());
    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+"?time="+System.currentTimeMillis(),networkImageLoader);
}
  • 如果可以,请更改服务器的缓存策略
  • 您可以使用
    request.setShouldCache(false)
    禁用请求的缓存
  • 对于方法2,可以通过重写
    ImageLoader.makeImageRequest()

    公共类NoCacheImageLoader扩展了ImageLoader{
    公共NoCacheImageLoader(请求队列队列、ImageCache ImageCache){
    超级(队列,图像缓存);
    }
    @凌驾
    受保护的请求MakeMageRequest(字符串请求URL、int-maxWidth、int-maxHeight、ImageView.ScaleType-ScaleType、字符串缓存键){
    Request-Request=super.makeImageRequest(requestUrl、maxWidth、maxHeight、scaleType、cacheKey);
    //关键方法
    request.setShouldCache(false);
    返回请求;
    }
    }
    
    然后使用
    NoCacheImageLoader
    而不是
    ImageLoader
    。现在它不会将映像缓存到磁盘中

    顺便说一句,您仍然应该向url添加时间戳,因为如果url相同,
    NetworkImageView
    将不会再次加载图像

  • 如果可以,请更改服务器的缓存策略
  • 您可以使用
    request.setShouldCache(false)
    禁用请求的缓存
  • 对于方法2,可以通过重写
    ImageLoader.makeImageRequest()

    公共类NoCacheImageLoader扩展了ImageLoader{
    公共NoCacheImageLoader(请求队列队列、ImageCache ImageCache){
    超级(队列,图像缓存);
    }
    @凌驾
    受保护的请求MakeMageRequest(字符串请求URL、int-maxWidth、int-maxHeight、ImageView.ScaleType-ScaleType、字符串缓存键){
    Request-Request=super.makeImageRequest(requestUrl、maxWidth、maxHeight、scaleType、cacheKey);
    //关键方法
    request.setShouldCache(false);
    返回请求;
    }
    }
    
    然后使用
    NoCacheImageLoader
    而不是
    ImageLoader
    。现在它不会将映像缓存到磁盘中


    顺便说一句,您仍然应该向url添加时间戳,因为如果url相同,
    NetworkImageView
    将不会再次加载图像。

    建议为用户配置文件图像url添加额外的时间戳参数。也许您可以检查这个:建议为用户配置文件图像url添加额外的时间戳参数。也许你可以检查一下这个:它工作得很好,但是所有缓存的图像都会填满存储空间,不是吗?是的,它会为你的图像创建其他存储缓存。在您的情况下,只有更新个人资料图片,我认为存储没有问题。首先,谢谢您,缓存有任何限制吗?我的意思是,应用程序将包含超过100个用户,可以查看彼此的个人资料,如果缓存有限制,并且不会填满整个存储空间,我可以接受。它工作得很好,但所有缓存的图像都会填满存储空间,不是吗?是的,它会为您的图像创建其他存储缓存。在您的情况下,只有更新个人资料图片,我认为存储没有问题。首先,谢谢您,缓存有任何限制吗?我的意思是,应用程序将包含超过100个用户,可以查看彼此的个人资料,如果缓存有限制,并且不会填满整个存储空间,我可以接受。所以我想不再有存储问题了?所以我想不再有存储问题了?