Android 如何使用Glide加载具有相同url和不同图像的图像?
我正在使用Glide库加载图像,如下所示Android 如何使用Glide加载具有相同url和不同图像的图像?,android,android-glide,Android,Android Glide,我正在使用Glide库加载图像,如下所示 public class LoadImageUtils { private LoadImageUtils() { //do nothing } private static GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder; public static void loadImage(String avatarUrl, Cont
public class LoadImageUtils {
private LoadImageUtils() {
//do nothing
}
private static GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder;
public static void loadImage(String avatarUrl, Context context, ImageView personImage) {
if (TextUtils.isEmpty(avatarUrl)) {
return;
}
if (avatarUrl.endsWith(".svg")) {
initializeRequestBuilder(context);
Uri uri = Uri.parse(avatarUrl);
requestBuilder
.load(uri)
.into(personImage);
} else {
if (context != null) {
Glide.with(context)
.load(avatarUrl)
.placeholder(R.mipmap.avatar_big)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
})
.into(personImage);
}
}
}
private static void initializeRequestBuilder(Context context) {
if (context != null) {
requestBuilder = Glide.with(context)
.using(Glide.buildStreamModelLoader(Uri.class, context), InputStream.class)
.from(Uri.class)
.as(SVG.class)
.transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
.sourceEncoder(new StreamEncoder())
.cacheDecoder(new FileToStreamDecoder<SVG>(new SvgDecoder()))
.decoder(new SvgDecoder())
.placeholder(R.mipmap.avatar_big)
.error(R.mipmap.avatar_big)
.animate(android.R.anim.fade_in)
.listener(new SvgSoftwareLayerSetter<Uri>());
}
}
公共类LoadImageUtils{
私有LoadImageUtils(){
//无所事事
}
私有静态GenericRequestBuilder请求生成器;
公共静态void loadImage(字符串avatarUrl、上下文上下文、ImageView personImage){
if(TextUtils.isEmpty(avatarUrl)){
返回;
}
if(avatarUrl.endsWith(“.svg”)){
初始化RequestBuilder(上下文);
Uri=Uri.parse(avatarUrl);
请求生成器
.load(uri)
.进入(人格形象);
}否则{
if(上下文!=null){
带(上下文)滑动
.load(阿瓦塔鲁尔)
.占位符(R.mipmap.avatar\u big)
.diskCacheStrategy(diskCacheStrategy.SOURCE)
.listener(新的RequestListener(){
@凌驾
公共布尔onException(异常e、字符串模型、目标、布尔isFirstResource){
返回false;
}
@凌驾
公共布尔值onResourceReady(GlideDrawable资源、字符串模型、目标、布尔值isFromMemoryCache、布尔值isFirstResource){
返回false;
}
})
.进入(人格形象);
}
}
}
私有静态void initializeRequestBuilder(上下文){
if(上下文!=null){
requestBuilder=Glide.with(上下文)
.using(Glide.buildStreamModelLoader(Uri.class,context),InputStream.class)
.from(Uri.class)
.as(SVG.class)
.transcode(新的svgdrawableTrancoder(),PictureDrawable.class)
.sourceEncoder(新的StreamEncoder())
.cacheDecoder(新文件ToStreamDecoder(新SvgDecoder()))
.decoder(新的SvgDecoder())
.占位符(R.mipmap.avatar\u big)
.错误(R.mipmap.avatar\u大)
.animate(android.R.anim.fade_in)
.listener(新的SvgSoftwareLayerSetter());
}
}
}
我的应用程序类似于facebook,有帖子、帖子评论、聊天功能。但每当用户通过web更改其图像时,我都会得到相同的“url”来加载用户图像。但是,Glide维护缓存以存储所有图像
在我的例子中,加载之前的图像是因为相同的url
但是如果我使用.skipMemoryCache(true)
方法来加载所有用户图像需要花费大量时间
我怎样才能解决这个问题
有没有比这更好的解决方案的替代图书馆
这个
您不应该为此维护缓存。感谢您的快速响应。如果不从服务器下载图像,如何从第二次加载图像?我不确定它是否有效,但请从后端尝试一件事,当用户上载新图像时,后端的布尔值设置为true,您将得到响应。现在,在您这边,您检查布尔值是否为真,您初始化glide而不使用缓存,如果为假,您可以使用缓存中包含的图像。