本文共 3072 字,大约阅读时间需要 10 分钟。
在使用Glide加载网络图片时,遇到Https的地址会加载不出来,是因为需要SSL验证,忽略掉SSL验证方法如下。
1、在gradle中增加okhttps依赖库
implementation("com.github.bumptech.glide:okhttp3-integration:4.0.0" ) { exclude group: "com.android.support" }
2、定义一个类继承AppGlideModule类,并且使用@GlideModule注解
@GlideModulepublic class OkHttpAppGlideModule extends AppGlideModule{ @Override public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) { super.applyOptions(context, builder); ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); } @Override public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) { super.registerComponents(context, glide, registry); //设置请求方式为okhttp 并设置okhttpClient的证书及超时时间 OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(UnsafeOkHttpClient.getUnsafeOkHttpClient()); registry.replace(GlideUrl.class, InputStream.class,factory); }}
3、忽略SSL证书验证
public class UnsafeOkHttpClient { public static OkHttpClient getUnsafeOkHttpClient() { try { // Create a trust manager that does not validate certificate chains final TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { @Override public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { } @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[]{ }; } } }; // Install the all-trusting trust manager final SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); // Create an ssl socket factory with our all-trusting manager final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]); builder.hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); builder.connectTimeout(20, TimeUnit.SECONDS); builder.readTimeout(20,TimeUnit.SECONDS); OkHttpClient okHttpClient = builder.build(); return okHttpClient; } catch (Exception e) { throw new RuntimeException(e); } }}
转载地址:http://pnsvi.baihongyu.com/