Glide加载IP地址图片遇SocketException: Connection reset问题求助
解决Glide加载IP地址图片出现SocketException: Connection reset的方案
以下是几个经过验证的可行解决办法,按优先级尝试:
1. 替换Glide的默认Http客户端为自定义OkHttp实例
Glide默认的Http配置可能和你的服务器不兼容,自定义OkHttp客户端可以调整超时、重试等参数:
首先确保添加Glide的OkHttp集成依赖(版本和你使用的Glide版本匹配):
implementation 'com.github.bumptech.glide:okhttp3-integration:4.15.1'
然后创建自定义的AppGlideModule来替换客户端:
@GlideModule public class CustomGlideModule extends AppGlideModule { @Override public void registerComponents(Context context, Glide glide, Registry registry) { OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .retryOnConnectionFailure(true) .protocols(Collections.singletonList(Protocol.HTTP_1_1)) // 强制使用HTTP/1.1,避免HTTP/2兼容性问题 .build(); registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(okHttpClient)); } }
2. 检查并修正服务器的响应头
Glide对图片的MIME类型校验较严格,如果服务器返回的Content-Type不是image/webp(比如返回application/octet-stream),可能导致加载失败。请调整服务器配置,确保WebP图片的响应头设置为:
Content-Type: image/webp
3. 强制Glide忽略格式校验直接加载
如果暂时无法修改服务器配置,可以让Glide强制以Bitmap形式加载,跳过部分校验:
Glide.with(yourContext) .asBitmap() .load("http://xx.xx.xx.xx:1901/image/image.webp") .dontTransform() .into(yourImageView);
4. 清除Glide缓存
有时候缓存的错误响应会导致重复失败,先清除缓存再尝试加载:
// 清除磁盘缓存(建议在子线程执行) new Thread(() -> Glide.get(yourContext).clearDiskCache()).start(); // 清除内存缓存 Glide.get(yourContext).clearMemory();
内容的提问来源于stack exchange,提问作者Guvanch Rahmankulov
相关产品推荐
相关产品推荐

