因为在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Store中的所有应用都必须启用App Transport Security安全功能,所以受之牵连,因此图片加载框架也要兼容https接口。1、在build.gradle中添加依赖:
 compile 'com.github.bumptech.glide:glide:3.6.1'compile 'com.squareup.okhttp:okhttp:2.7.2'compile 'com.github.bumptech.glide:okhttp-integration:1.4.0@aar'
2.拷贝'com.github.bumptech.glide:okhttp-integration:1.4.0@aar'里面3个类OkHttpGlideModule ,OkHttpUrlLoader,OkHttpStreamFetcher的源码;OkHttpGlideModule类:改写成如下忽略证书,支持https
public class OkHttpGlideModule implements GlideModule {@Overridepublic void applyOptions(Context context, GlideBuilder builder) {// Do nothing.}@Overridepublic void registerComponents(Context context, Glide glide) {OkHttpClient okHttpClient=new OkHttpClient();X509TrustManager xtm = new X509TrustManager() {@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) {}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) {}@Overridepublic X509Certificate[] getAcceptedIssuers() {X509Certificate[] x509Certificates = new X509Certificate[0];return x509Certificates;}};SSLContext sslContext = null;try {sslContext = SSLContext.getInstance("SSL");sslContext.init(null, new TrustManager[]{xtm}, new SecureRandom());} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (KeyManagementException e) {e.printStackTrace();}HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {@Overridepublic boolean verify(String hostname, SSLSession session) {return true;}};okHttpClient.setSslSocketFactory(sslContext.getSocketFactory());okHttpClient.setHostnameVerifier(DO_NOT_VERIFY);glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(okHttpClient));}
}

OkHttpStreamFetcher类

public class OkHttpStreamFetcher implements DataFetcher<InputStream> {private final OkHttpClient client;private final GlideUrl url;private InputStream stream;private ResponseBody responseBody;public OkHttpStreamFetcher(OkHttpClient client, GlideUrl url) {this.client = client;this.url = url;}@Overridepublic InputStream loadData(Priority priority) throws Exception {Request.Builder requestBuilder = new Request.Builder().url(url.toStringUrl());for (Map.Entry<String, String> headerEntry : url.getHeaders().entrySet()) {String key = headerEntry.getKey();requestBuilder.addHeader(key, headerEntry.getValue());}Request request = requestBuilder.build();Response response = client.newCall(request).execute();responseBody = response.body();if (!response.isSuccessful()) {throw new IOException("Request failed with code: " + response.code());}long contentLength = responseBody.contentLength();stream = ContentLengthInputStream.obtain(responseBody.byteStream(), contentLength);return stream;}@Overridepublic void cleanup() {if (stream != null) {try {stream.close();} catch (IOException e) {// Ignored}}if (responseBody != null) {try {responseBody.close();} catch (IOException e) {// Ignored.}}}@Overridepublic String getId() {return url.getCacheKey();}@Overridepublic void cancel() {// TODO: call cancel on the client when this method is called on a background thread. See #257}
}

OkHttpUrlLoader 类

public class OkHttpUrlLoader implements ModelLoader<GlideUrl, InputStream> {/*** The default factory for {@link OkHttpUrlLoader}s.*/public static class Factory implements ModelLoaderFactory<GlideUrl, InputStream> {private static volatile OkHttpClient internalClient;private OkHttpClient client;private static OkHttpClient getInternalClient() {if (internalClient == null) {synchronized (Factory.class) {if (internalClient == null) {internalClient = new OkHttpClient();}}}return internalClient;}/*** Constructor for a new Factory that runs requests using a static singleton client.*/public Factory() {this(getInternalClient());}/*** Constructor for a new Factory that runs requests using given client.*/public Factory(OkHttpClient client) {this.client = client;}@Overridepublic ModelLoader<GlideUrl, InputStream> build(Context context, GenericLoaderFactory factories) {return new OkHttpUrlLoader(client);}@Overridepublic void teardown() {// Do nothing, this instance doesn't own the client.}}private final OkHttpClient client;public OkHttpUrlLoader(OkHttpClient client) {this.client = client;}@Overridepublic DataFetcher<InputStream> getResourceFetcher(GlideUrl model, int width, int height) {return new OkHttpStreamFetcher(client, model);}
}

3、删除在build.gradle中依赖:

compile 'com.github.bumptech.glide:okhttp-integration:1.4.0@aar';  

4、在Android.Manifest中配置:

<meta-dataandroid:name="***.OkHttpGlideModule"   android:value="GlideModule" />

此时,重新运行后发现可以加载https啦。
但是,在发布后会出现找不到OkHttpGlideModule类。是因为被混淆了,因此发布时还得注意下

5、发布时避免混淆
在混淆文件proguard-rules.pro中添加混淆规则

-keep class cn.manmanda.util.https_glide.OkHttpGlideModule

Glide加载https图片相关推荐

  1. Android中Glide加载Https图片失败的解决方案(记录)

    1.在Application中添加如下方法: public static void handleSSLHandshake() {try {TrustManager[] trustAllCerts = ...

  2. 使用Glide加载https网址图片

      最近有网友问我怎么加载https图片,说是从网上找了很多办法都没成功,然后我就问他用的是什么图片加载工具,回答是glide,然后我自己也去网上找了一下,千篇一律的都说是结合okhttp来使用,修改 ...

  3. Glide如何加载https图片(简明操作)

    Glide如何加载https图片(简明操作) 利用以下简明步骤可以快速完成Glide加载https图片 - gradle引用 compile 'com.squareup.okhttp3:okhttp: ...

  4. 成功解决Glide3.7.0加载https图片,显示占位图问题。

    平时我们使用Glide加载http网址的图片的时候,图片可以正常加载出来,但是如果服务器端加上了安全认证,当加载自签名的https图片的时候就会报如下错误(证书路径验证异常). Trust ancho ...

  5. Android 系统(167)----Glide加载圆角图片的方法

    Glide加载圆角图片的方法 现在在市面上很多App的UI设计都会出现圆角图片的显示.Glide本身也提供了圆角图片的加载方式.但是我们在开发中有可能遇到只要顶部展示圆角,或者某一个角是圆角.这样的需 ...

  6. android圆角glide,Glide加载圆角图片的方法

    原标题:Glide加载圆角图片的方法 现在在市面上很多App的UI设计都会出现圆角图片的显示.Glide本身也提供了圆角图片的加载方式.但是我们在开发中有可能遇到只要顶部展示圆角,或者某一个角是圆角. ...

  7. Glide加载部分图片不显示问题

    Glide版本为4及其以上 图片不显示原因 没有添加INTERNET网络权限 老版本Glide无法加载https图片(需要使用okhttp忽略证书) 图片Url无法连接 图片返回数据不全且格式不正确 ...

  8. Android Glide 加载圆形图片(绝对实用)

    1.导入依赖 implementation 'com.github.bumptech.glide:glide:4.6.1' 2.用Glide加载圆形图片 Glide.with(context).loa ...

  9. 解决ImageLoader加载HTTPS图片证书校验异常问题

    解决ImageLoader加载HTTPS图片证书校验异常问题 参考文章: (1)解决ImageLoader加载HTTPS图片证书校验异常问题 (2)https://www.cnblogs.com/cs ...

最新文章

  1. celery 停止执行中 task
  2. 中国队刷新知识图谱“世界杯”,但点开冠军团队一看,我愣住了
  3. [No000011B]为什么有些程序员悄无声息渡过35岁中年危机?
  4. 双缝干涉试验为什么恐怖?
  5. 类属性和实例属性冲突
  6. 构造方法与对象的创建 java 1614780813
  7. ipython的使用
  8. IDEA报错: Port already in use: 2100
  9. DeFi借贷协议FLUX和比原链(BTM)达成全面战略合作协议,支持BTM借贷及挖矿
  10. 一个导入到本地读取文档的方法
  11. 2019电子科大计算机基础知识,电子科技大学820真题1999-2019终极版.pdf
  12. 让Cookies操作变得向Session一样简单
  13. 很好的开源UI框架Chico UI
  14. R中读取Excel大文件
  15. 在VMWare中配置SQLServer2005日志传送 Step by Step(二)——配置和测试
  16. .net byte转java byte_「Java知识收集整理」Java语法的基础
  17. 制作一个免费的Wi-Fi二维码原来这么简单
  18. java调用打印机没反应_java代码调用打印机没反应
  19. java 登陆短信验证码_JAVA短信验证登录
  20. 存储容量单位GB GiB MB MiB

热门文章

  1. Mybatis学习-关于Map的应用
  2. elasticsearch 的高级检索以及 Ik分词器的配置和使用
  3. ubuntu移植jsoncpp到Android平台
  4. easypoi 模板导入、导出合并excel单元格功能
  5. 分析到决策?“AI+BI”这辆车你得尽快搭上
  6. android 手写签名
  7. 《数字短片创作(修订版)》——第2章 创造独特的角色、主题和视觉隐喻 创造强有力的人物角色...
  8. 功夫世界 mysql启动_植物大战僵尸2功夫世界卡在启动中界面问题的解决方法
  9. ipad pro无线无法连接服务器,ipadappstore无法连接 ipad能上网但appstore无法连接 - 云骑士一键重装系统...
  10. Unity Shader学习三:坐标空间的变换