这里综合了下网友的写法,因为有些写法有点老,可能都不能正确编译。另外有些网友的代码又不全,最后综合各种,自己完善了相关的方法,也实现了图片的正确显示。
再Application里面去实现Glide的OkHttpClient的替换,让自定义的OkhttpClient忽略证书问题。
1. Application中调用如下替换方法(缺的方法,接着看哈) - 有些网友的方法可能有点老了,不是我这样的写法,我目前Glide版本是4.9.0,还算是比较新的哈..
// 解决glide加载https证书问题
try {
Glide.get(this).getRegistry().replace(
GlideUrl.class, InputStream.class,
new OkHttpUrlLoader.Factory(getSSLOkHttpClient()));
} catch (Exception e) {
e.printStackTrace();
}
2. 上面的OkHttpUrlLoader需要引入如下库 - 需要下面第三个引入
// glide
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.9.0'
3. getSSLOkHttpClient方法实现 - 这也是目前比较新的写法,有些写法真的有点老哈!需要注意,可能当前环境你拿过去要出问题
/**
* 设置https 访问的时候对所有证书都进行信任
*
* @throws Exception
*/
private OkHttpClient getSSLOkHttpClient() throws Exception {
final X509TrustManager trustManager = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
};
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, new TrustManager[]{trustManager}, new SecureRandom());
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
return new OkHttpClient.Builder()
.sslSocketFactory(sslSocketFactory, trustManager)
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
})
.build();
}
4. 这样就全了,顺便看哈都引入了哪些包
![11ecd811e73e3ad6a4460669963d6955.png](https://i-blog.csdnimg.cn/blog_migrate/5d511564564b1343ee0af282bc2935b0.jpeg)
参考啊: OkHttp升级记录