Android 如何使用Glide加载具有相同url和不同图像的图像?

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

我正在使用Glide库加载图像,如下所示

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而不使用缓存,如果为假,您可以使用缓存中包含的图像。