Glide4.0 加载 Https 图片

作者: XiMiMax | 来源:发表于2017-11-03 09:38 被阅读275次

最近在项目中遇到加载https图片,单纯的glide遇到了加载不出来的问题,下面讲一下解决过程,以便可以帮助到大家 (0.0)

  1. 注入依赖
compile "com.github.bumptech.glide:okhttp3-integration:4.0.0-RC1"
  1. 拷贝相关类到自己的工程目录下


    包目录结构图
  2. 修改相关代码

  • OkHttpGlideModule
public class OkHttpGlideModule implements GlideModule {
  @Override
  public void applyOptions(Context context, GlideBuilder builder) {
    // Do nothing.
  }
  @Override
  public void registerComponents(Context context, Glide glide, Registry registry) {
    X509TrustManager xtm = new X509TrustManager() {
      @Override
      public void checkClientTrusted(X509Certificate[] chain, String authType) {
      }

      @Override
      public void checkServerTrusted(X509Certificate[] chain, String authType) {
      }

      @Override
      public 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() {
      @Override
      public boolean verify(String hostname, SSLSession session) {
        return true;
      }
    };

    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.sslSocketFactory(sslContext.getSocketFactory());
    builder.hostnameVerifier(DO_NOT_VERIFY);
    builder.hostnameVerifier(new HostnameVerifier() {
      @Override
      public boolean verify(String hostname, SSLSession session) {
        return true;
      }
    });

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

    registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(builder.build()));
  }
}
  • OkHttpLibraryGlideModule
@GlideModule
public final class OkHttpLibraryGlideModule extends LibraryGlideModule {
  @Override
  public void registerComponents(Context context, Glide glide, Registry registry) {
    registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory());
  }
}
  1. 配置AndroidManifest.xml
 <meta-data
            android:name="com.***.***.OkHttpGlideModule"
            android:value="GlideModule"/>
  1. 移除依赖
// compile "com.github.bumptech.glide:okhttp3-integration:4.0.0-RC1"

到这一步你就可以成功加载https 的图片了

参考文章
Glide加载https图片
Glide4.0加载https图片

有不同方法欢迎留言

每星期至少一篇跟新,感兴趣可以关注。

一起学习,一起进步。

相关文章

网友评论

  • 5615ad5b1361:不是所有Https地址,是自定义签名的Https地址。也就是不安全的图片地址加载。
    XiMiMax:@Sabirjan 对了,这个是没注意的,谢谢提醒

本文标题:Glide4.0 加载 Https 图片

本文链接:https://www.haomeiwen.com/subject/rfizpxtx.html