Glide加载Https地址图片

11 篇文章 0 订阅
8 篇文章 1 订阅

问题背景

最近在做项目中,发现图片加载不出来了,开始以为是布局出问题了,经过一顿操作后,无果,郁闷,之前都能加载,没办法,只好从URL地址下手了,图片是七牛云地址,从浏览器中打开是正常的,郁闷,我再次检查了一下代码,没有发现异常,正在苦思冥想中,发现图片地址是https,怀疑Glide是不是无法加载https的图片呢,于是我先把地址从json数据中取出来,然后,把地址修改成Http的,运行后,图片加载成功,原因已找到,Glide无法加载Https,那么现在就需要解决怎么放Glide加载Https呢?

通过查询资料后,Okhttp结合Glide可以解决这个问题,但是网上的资料都不齐全也没有完整Demo,所以只好自己一步一步来找了

第一步,解决Glide结合Okhttp问题
第二步,解决okhttp忽略https证书问题

完整的Demo地址,Demo中使用的Glide4.x版本,请各位注意检查Glide版本,老版本跟4.x版本不太一致

贴一下重要的代码

绕开证书
 fun getUnsafeOkHttpClient(): OkHttpClient {


        try {
            val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
                override fun checkClientTrusted(
                    chain: Array<java.security.cert.X509Certificate>,
                    authType: String
                ) {
                }

                override fun checkServerTrusted(
                    chain: Array<java.security.cert.X509Certificate>,
                    authType: String
                ) {
                }

                override fun getAcceptedIssuers(): Array<java.security.cert.X509Certificate> {
                    return arrayOf()
                }
            })
            val sslContext = SSLContext.getInstance("SSL")
            sslContext.init(null, trustAllCerts, java.security.SecureRandom())
            val sslSocketFactory = sslContext.socketFactory

            val builder = OkHttpClient.Builder()
            builder.sslSocketFactory(sslSocketFactory, trustAllCerts[0] as X509TrustManager)
            builder.hostnameVerifier(HostnameVerifier { hostname, session -> true })

            builder.connectTimeout(20, TimeUnit.SECONDS)
            builder.readTimeout(20, TimeUnit.SECONDS)

            return builder.build()
        } catch (e: Exception) {
            throw RuntimeException(e)
        }

    }

重写GlideModule

@GlideModule
class OkHttpGlideModule : AppGlideModule() {
    override fun applyOptions(context: Context, builder: GlideBuilder) {
        // Do nothing.
    }

    override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
        val client = UnsafeOkHttpClient.getUnsafeOkHttpClient()
        registry.replace(GlideUrl::class.java, InputStream::class.java, OkHttpUrlLoader.Factory(client))


    }


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值