1. 程式人生 > >解決glide載入七牛雲圖片快取問題(url帶token)

解決glide載入七牛雲圖片快取問題(url帶token)

七牛雲帶驗證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