Android glide Android 4.X 中没有加载图片
Android glide not loading pictures in Android 4.X
我正在使用 Glide v4.11 从网络加载图片,在 android 5.0 或更高版本中一切正常,但在 android 4.X 中无法加载图片。
这是我的代码:
RequestOptions options = new RequestOptions()
.placeholder(android.R.drawable.progress_horizontal)
.error(android.R.drawable.presence_offline)
.diskCacheStrategy(DiskCacheStrategy.ALL);
Glide.with(context)
.load(data.getImage_url())
.apply(options)
.into(holder.thumbnail);
这是 Android 4.4 上的 LogCat:
W/Glide: Load failed for https://www.gradientapi.xyz/generate/w/1000/h/500 with size [188x263]
class com.bumptech.glide.load.engine.GlideException: Failed to load resource
There was 1 cause:
javax.net.ssl.SSLHandshakeException(javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb85422a0: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0xa744e990:0x00000000))
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
There was 1 cause:
javax.net.ssl.SSLHandshakeException(javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb85422a0: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0xa744e990:0x00000000))
call GlideException#logRootCauses(String) for more detail
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed
There was 1 cause:
javax.net.ssl.SSLHandshakeException(javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb85422a0: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0xa744e990:0x00000000))
call GlideException#logRootCauses(String) for more detail
Cause (1 of 1): class javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb85422a0: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0xa744e990:0x00000000)
我在网上搜索后发现 Android 4.4 仅支持 TLS 1.0。
可能是问题所在?如果是,有什么解决办法吗?
这是一个握手异常。在早于 Android 5.0
TLSv1.1
和 TLSv1.2
的设备上默认不启用协议,这就是发生此异常的原因。
您可以在应用程序的 class onCreate 方法中尝试此操作:
if (Build.VERSION.SDK_INT == 19) {
try {
ProviderInstaller.installIfNeeded(this);
} catch (Exception ignored) {
}
}
此外,您可以查看 this github issue 以获得更好的解决方案。
我 运行 在 API 30 上遇到了这个问题。很奇怪,我使用带有 okhttp 的 Retrofit 可以很好地访问同一台服务器上的其他东西,但是当我尝试使用 Glide 时加载图像,我得到了可怕的:
SSLProtocolException: Read error: ssl=0xe78f6a18: Failure in SSL library, usually a protocol error
我看到了很多关于旧 Android 版本在 TLS1.2 方面存在问题的帖子,但这不是问题所在。似乎 Glide 依赖于旧版本的 OKHttp,这就是问题所在。或者类似的东西,不太确定,但我确实在我的 gradle 文件中修复了它:
implementation 'com.github.bumptech.glide:glide:4.12.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.12.0'
似乎是 okhttp3-integration
解决了这个问题。我将此张贴在这里,供任何被此难住并进行搜索的人使用。
我正在使用 Glide v4.11 从网络加载图片,在 android 5.0 或更高版本中一切正常,但在 android 4.X 中无法加载图片。
这是我的代码:
RequestOptions options = new RequestOptions()
.placeholder(android.R.drawable.progress_horizontal)
.error(android.R.drawable.presence_offline)
.diskCacheStrategy(DiskCacheStrategy.ALL);
Glide.with(context)
.load(data.getImage_url())
.apply(options)
.into(holder.thumbnail);
这是 Android 4.4 上的 LogCat:
W/Glide: Load failed for https://www.gradientapi.xyz/generate/w/1000/h/500 with size [188x263]
class com.bumptech.glide.load.engine.GlideException: Failed to load resource
There was 1 cause:
javax.net.ssl.SSLHandshakeException(javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb85422a0: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0xa744e990:0x00000000))
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
There was 1 cause:
javax.net.ssl.SSLHandshakeException(javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb85422a0: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0xa744e990:0x00000000))
call GlideException#logRootCauses(String) for more detail
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed
There was 1 cause:
javax.net.ssl.SSLHandshakeException(javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb85422a0: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0xa744e990:0x00000000))
call GlideException#logRootCauses(String) for more detail
Cause (1 of 1): class javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb85422a0: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0xa744e990:0x00000000)
我在网上搜索后发现 Android 4.4 仅支持 TLS 1.0。
可能是问题所在?如果是,有什么解决办法吗?
这是一个握手异常。在早于 Android 5.0
TLSv1.1
和 TLSv1.2
的设备上默认不启用协议,这就是发生此异常的原因。
您可以在应用程序的 class onCreate 方法中尝试此操作:
if (Build.VERSION.SDK_INT == 19) {
try {
ProviderInstaller.installIfNeeded(this);
} catch (Exception ignored) {
}
}
此外,您可以查看 this github issue 以获得更好的解决方案。
我 运行 在 API 30 上遇到了这个问题。很奇怪,我使用带有 okhttp 的 Retrofit 可以很好地访问同一台服务器上的其他东西,但是当我尝试使用 Glide 时加载图像,我得到了可怕的:
SSLProtocolException: Read error: ssl=0xe78f6a18: Failure in SSL library, usually a protocol error
我看到了很多关于旧 Android 版本在 TLS1.2 方面存在问题的帖子,但这不是问题所在。似乎 Glide 依赖于旧版本的 OKHttp,这就是问题所在。或者类似的东西,不太确定,但我确实在我的 gradle 文件中修复了它:
implementation 'com.github.bumptech.glide:glide:4.12.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.12.0'
似乎是 okhttp3-integration
解决了这个问题。我将此张贴在这里,供任何被此难住并进行搜索的人使用。