解決glide載入七牛雲圖片快取問題(url帶token)
阿新 • • 發佈:2019-02-03
七牛雲帶驗證URL
http://xxx.com/FmmoICAJpy2Q1iNGUw7R2K94uH5x?token=dTVWOtVUIiuiyke-tBBl8pl1w6sdK3iO_kE4p9yQ:7SM9kXzG6DvsuehiiJMxHy41SUQ
七牛雲帶驗證並且帶過期時間的URL
http://xxx.com/FmmoICAJpy2Q1iNGUw7R2K94uH5x?e=1494561302&token=dTVWOtVUIiuiyke-tBBl8pl1w6sdK3iO_kE4p9yQ:7SM9kXzG6DvsuehiiJMxHy41SUQ
======解決方法======
glide的真正的快取key是一堆引數組成的,而圖片的url只是key其中的一個引數而已
glide原始碼中會呼叫DataFetcher的getId方法,載入網路圖片是使用的HttpUrlFetcher的getCacheKey方法
1.建立這個類 重寫getCacheKey
public class QNCacheGlideUrl extends GlideUrl { private String mUrl; public QNCacheGlideUrl(String url) { super(url); mUrl = url; } @Override public String getCacheKey() { return checkQnUrl() && !TextUtils.isEmpty(getQNCacheKey()) ? getQNCacheKey() : super.getCacheKey(); } private String getQNCacheKey() { String cacheKey = null; int index = mUrl.indexOf("?"); if (index != -1) { cacheKey = mUrl.substring(0, index); } return cacheKey; } public boolean checkQnUrl() { if (!TextUtils.isEmpty(mUrl) && (mUrl.contains("&token=") || mUrl.contains("?token="))) { return true; } return false; } }
2.使用方法
Glide.with(imageView.getContext())
.load(new QNCacheGlideUrl(url))
.into(imageView);
glide的真正的快取key是一堆引數組成的,而圖片的url