防止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)
禁用请求的缓存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)
禁用请求的缓存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个用户,可以查看彼此的个人资料,如果缓存有限制,并且不会填满整个存储空间,我可以接受。所以我想不再有存储问题了?所以我想不再有存储问题了?