Glide如何添加头部

在公司的一些项目中,为了资料的安全性需要在所有的请求中加入头部,那么图片加载也算请求

Glide工具类

在添加头部的时候会到缓存失效,APP每次都会重新加载图片,图片就会出现闪烁视差

package com.tripbay.utility

import com.bumptech.glide.load.model.GlideUrl
import com.bumptech.glide.load.model.Headers
import java.net.URL

class GlideUrlUtil : GlideUrl {
    private var mHashCode = 0

    constructor(url: URL?) : super(url) {}
    constructor(url: String?) : super(url) {}
    constructor(url: URL?, headers: Headers?) : super(url, headers) {}
    constructor(url: String?, headers: Headers?) : super(url, headers) {}

    override fun equals(o: Any?): Boolean {
        if (o is GlideUrl) {
            val other = o
            return cacheKey == other.cacheKey && !mapCompare(headers, other.headers)
        }
        return false
    }

    override fun hashCode(): Int {
        if (mHashCode == 0) {
            mHashCode = cacheKey.hashCode()
            if (headers != null) {
                for (s in headers.keys) {
                    if (headers[s] != null) {
                        mHashCode = 31 * mHashCode + headers[s].hashCode()
                    }
                }
            }
        }
        return mHashCode
    }

    companion object {
        private fun mapCompare(map1: Map<String, String?>?, map2: Map<String, String?>?): Boolean {
            var differ = false
            if (map1 != null && map2 != null) {
                if (map1.size == map2.size) {
                    for ((key, value) in map1) {
                        val value1 = if (value == null) "" else value
                        val value2 = if (map2[key] == null) "" else map2[key]!!
                        if (value1 != value2) {
                            differ = true
                            break
                        }
                    }
                }
            } else differ = map1 != null || map2 != null
            return differ
        }
    }
}

Glide 工具类封装

package com.tripbay.utility

import android.content.Context
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.net.Uri
import android.text.TextUtils
import android.webkit.URLUtil
import android.widget.ImageView
import com.bumptech.glide.load.model.GlideUrl
import com.bumptech.glide.load.model.Headers
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.tripbay.BuildConfig
import com.tripbay.GlideApp
import com.tripbay.R
import com.tripbay.api.ApiDataManager

/**
 * 圖片價值框架
 * icez
 * 2020-11-12
 */
class LoadImageUtil {
    companion object {
        fun loadImg(context: Context, url: String?, img: ImageView) {
            if (URLUtil.isHttpUrl(url) || URLUtil.isHttpsUrl(url)) {
                if (TextUtils.isEmpty(url)) {
                    GlideApp.with(context)
                        .load(url)
                        .apply(RequestOptions.centerCropTransform())
                        .into(img)
                } else {
                    val header = MyHeader()
                    val glideUrl: GlideUrl = GlideUrlUtil(url, header)
                    GlideApp.with(context)
                        .load(glideUrl)
                        .apply(RequestOptions.centerCropTransform())
                        .into(img)
                }

            } else {
                GlideApp.with(context)
                    .load(url)
                    .apply(RequestOptions.centerCropTransform())
                    .into(img)
            }
        }

        fun loadImgBySrcType(context: Context, url: String?, img: ImageView) {
            if (URLUtil.isHttpUrl(url) || URLUtil.isHttpsUrl(url)) {
                if (TextUtils.isEmpty(url)) {
                    GlideApp.with(context)
                        .load(url)
                        .into(img)
                } else {
                    val header = MyHeader()
                    val glideUrl: GlideUrl = GlideUrlUtil(url, header)
                    GlideApp.with(context)
                        .load(glideUrl)
                        .into(img)
                }

            } else {
                GlideApp.with(context)
                    .load(url)
                    .apply(RequestOptions.centerCropTransform())
                    .into(img)
            }
        }

        fun loadImg(context: Context, url: Uri?, img: ImageView) {
            GlideApp.with(context)
                .load(url)
                .apply(RequestOptions.centerCropTransform())
                .into(img)
        }

        fun loadImg(context: Context, url: Int, img: ImageView) {
            GlideApp.with(context)
                .load(url)
                .apply(RequestOptions.centerCropTransform())
                .into(img)
        }

        fun loadImgByCircle(context: Context, url: String?, img: ImageView) {
            if (TextUtils.isEmpty(url)) {
                GlideApp.with(context)
                    .load(url)
                    .apply(RequestOptions.circleCropTransform())
                    .into(img)
            } else {
                if (URLUtil.isHttpsUrl(url) || URLUtil.isHttpUrl(url)) {
                    val header = MyHeader()
                    val glideUrl: GlideUrl = GlideUrlUtil(url, header)
                    GlideApp.with(context)
                        .load(glideUrl)
                        .apply(RequestOptions.circleCropTransform())
                        .into(img)
                } else {
                    GlideApp.with(context)
                        .load(url)
                        .apply(RequestOptions.circleCropTransform())
                        .into(img)
                }
            }

        }

        fun loadImgByCircle(context: Context, url: Uri?, img: ImageView) {

            GlideApp.with(context)
                .load(url)
                .apply(RequestOptions.circleCropTransform())
                .into(img)
        }

        fun loadImgDefaultImg(
            context: Context,
            url: String?,
            img: ImageView,
            placeholder: Int = R.drawable.default_userpic,
            fallback: Int = R.drawable.default_userpic,
            error: Int = R.drawable.default_userpic
        ) {
            if (TextUtils.isEmpty(url)) {
                val option = RequestOptions.circleCropTransform()
                    .placeholder(placeholder)//图片加载出来前,显示的图片
                    .fallback(fallback) //url为空的时候,显示的图片
                    .error(error)//图片加载失败后,显示的图片
                GlideApp.with(context)
                    .load(url)
                    .apply(option)
                    .into(img)
            } else {
                val option = RequestOptions.circleCropTransform()
                    .placeholder(placeholder)//图片加载出来前,显示的图片
                    .fallback(fallback) //url为空的时候,显示的图片
                    .error(error)//图片加载失败后,显示的图片
                if (URLUtil.isHttpUrl(url) || URLUtil.isHttpsUrl(url)) {
                    val header = MyHeader()
                    val glideUrl: GlideUrl = GlideUrlUtil(url, header)
                    GlideApp.with(context)
                        .load(glideUrl)
                        .apply(option)
                        .into(img)
                } else {
                    GlideApp.with(context)
                        .load(url)
                        .apply(option)
                        .into(img)
                }
            }

        }



}

    class MyHeader:Headers{
        override fun getHeaders(): MutableMap<String, String> {
            var mutableMap = HashMap<String,String>()
            mutableMap["X-Version"] = BuildConfig.VERSION_NAME
            mutableMap["os"] = "ANDROID"
            if (ApiDataManager.get().openTestMode || BuildConfig.DEBUG){
//                mutableMap["X-Grayscale-Version"] = "test"
            }
            return mutableMap
        }

    }
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐