2016-11-11 100 views
1

我正在從Android S3加載圖像的Android應用程序中工作。 圖片URL隨令牌和有效期密鑰隨機更改。出於這個原因,我無法緩存圖像滑翔。Glide圖像緩存ID不是url

有什麼方法可以將Glide緩存鍵設置爲任何靜態ID(如圖像ID)而不是URL。

我重視我的代碼片段從AWS

加載圖像
Glide.with(remoteGalleryAct).load(photoFinalImageURL) 
       .signature(new StringSignature(getImageUrl(photoFinalImageURL)))// remove AWS keys 
       .error(defaultNoImageDrawable) 
       .placeholder(defaultNoImageDrawable) 
       .dontAnimate() 
       .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
       .into(new ImageViewTarget<GlideDrawable>(photoHolder.photo) { 
        @Override 
        protected void setResource(GlideDrawable resource) { 
        } 

        @Override 
        public void onResourceReady(final GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) { 
         //super.onResourceReady(resource, glideAnimation); 
         view.setImageDrawable(resource); 
        } 
       }); 

請建議我有什麼辦法在滑翔實現。

+0

請在這裏上傳你的代碼 –

+0

對不起,我遲到我重視我的代碼加載圖像來自AWS S3 – user968571

回答

1

重寫GlideUrl類的getCacheKey()方法。該方法設置緩存圖像的關鍵。

這裏是如何做到這一點:

//Create a custom class and override the method to remove authentication header from the S3 image url 

public class GlideUrlCustomCacheKey extends GlideUrl { 
    public GlideUrlCustomCacheKey(String url) { 
     super(url); 
    } 

    public GlideUrlCustomCacheKey(String url, Headers headers) { 
     super(url, headers); 
    } 

    public GlideUrlCustomCacheKey(URL url) { 
     super(url); 
    } 

    public GlideUrlCustomCacheKey(URL url, Headers headers) { 
     super(url, headers); 
    } 

    @Override 
    public String getCacheKey() { 
     String url = toStringUrl(); 
     if (url.contains("?")) { 
      return url.substring(0, url.lastIndexOf("?")); 
     } else { 
      return url; 
     } 
    } 
} 

設置與該類獲得的URL的ImageView的:

Glide.with(context).load(new GlideUrlCustomCacheKey(buzzUrl)).into(imageView);