问题描述
当使用Glide框架加载图片时,可能会遇到加载失败的情况,导致图片无法正常显示,原因有很多。
以下是我的报错信息:
Load failed for https://i.ytimg.com/vi/zOEISgh7k_g/hqdefault.jpg with size [392x221]
class com.bumptech.glide.load.engine.GlideException: Failed to load resource
There was 1 root cause:
com.bumptech.glide.load.HttpException(Failed to connect or obtain data, status code: -1)
call GlideException#logRootCauses(String) for more detail
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class java.io.InputStream, REMOTE
解决方法
我加载的图片时一张https的图片,分析得知是证书问题,所以我这的解决方案是忽略https证书校验,只需在Application的onCreate()调用一下以下方法。
/**
* 忽略https的证书校验
*/
private fun handleSSLHandshake() {
try {
val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
override fun getAcceptedIssuers(): Array<X509Certificate?> {
return arrayOfNulls<X509Certificate>(0)
}
override fun checkClientTrusted(certs: Array<X509Certificate?>?, authType: String?) {}
override fun checkServerTrusted(certs: Array<X509Certificate?>?, authType: String?) {}
})
val sc = SSLContext.getInstance("TLS")
// trustAllCerts信任所有的证书
sc.init(null, trustAllCerts, SecureRandom())
HttpsURLConnection.setDefaultSSLSocketFactory(sc.socketFactory)
HttpsURLConnection.setDefaultHostnameVerifier { hostname, session -> true }
} catch (ignored: Exception) {
}
}
还有一种作法,通过配置证书:
1.在res/xml/下新建一个xml,可以命名为net_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">xxx.xxx.com</domain>
</domain-config>
</network-security-config>
2.在AndroidManifestde的application节点添加:
<application
android:allowBackup="true"
android:networkSecurityConfig="@xml/net_config"
具体参数详解参考:Android网络安全之NetworkSecurityConfig
其他可能的原因
如果不是证书问题
1.可能受android版本影响,android9.0系统默认禁止http协议,即禁止明文传输,必须使用https来通讯,除非清单中设置了android:usesCleartextTraffic=“true”。所以需要在AndroidManifestde的application节点添加:文章来源:https://www.toymoban.com/news/detail-539932.html
<application
android:name=".TvApp"
android:usesCleartextTraffic="true"
2.检查下是否拥有网络权限文章来源地址https://www.toymoban.com/news/detail-539932.html
<uses-permission android:name="android.permission.INTERNET" />
到了这里,关于Glide无法正常加载图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!