Glide加载volleyball.ir图片失败:No address associated with hostname问题排查
解决Glide加载volleyball.ir图片失败的问题
问题描述
使用Glide加载volleyball.ir域名下的图片(示例链接:https://volleyball.ir/wp-content/uploads/2023/11/IMG_0490-01.jpg)时失败,该图片可在浏览器正常显示,其他图片加载正常。
相关代码
val image_url = "https://volleyball.ir/wp-content/uploads/2023/11/IMG_0490-01.jpg" Glide.with(G.context).load(image_url).into(img)
报错日志
Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency on com.github.bumptech.glide:compiler in your application and a @GlideModule annotated AppGlideModule implementation or LibraryGlideModules will be silently ignored Load failed for [https://volleyball.ir/wp-content/uploads/2023/11/IMG_0490-01.jpg] with dimensions [525x525] class com.bumptech.glide.load.engine.GlideException: Failed to load resource There were 6 root causes: java.lang.RuntimeException(setDataSourceCallback failed: status = 0x80000000) java.lang.RuntimeException(setDataSourceCallback failed: status = 0x80000000) java.lang.RuntimeException(setDataSourceCallback failed: status = 0x80000000) java.lang.RuntimeException(setDataSource failed: status = 0x80000000) java.lang.RuntimeException(setDataSource failed: status = 0x80000000) java.net.UnknownHostException(Unable to resolve host "volleyball.ir": No address associated with hostname) call GlideException#logRootCauses(String) for more detail Cause (1 of 4): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{DirectByteBuffer->Object->Drawable}, DATA_DISK_CACHE, https://volleyball.ir/wp-content/uploads/2023/11/IMG_0490-01.jpg There were 3 root causes: java.lang.RuntimeException(setDataSourceCallback failed: status = 0x80000000) java.lang.RuntimeException(setDataSourceCallback failed: status = 0x80000000) java.lang.RuntimeException(setDataSourceCallback failed: status = 0x80000000) call GlideException#logRootCauses(String) for more detail
解决方案
从报错日志的UnknownHostException可以看出,核心问题是设备无法解析volleyball.ir域名,结合Glide的配置问题,按以下步骤处理:
1. 确认网络权限
确保AndroidManifest.xml中已添加必要的网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
同时检查应用的系统权限设置,确认未被限制网络访问。
2. 解决DNS解析失败问题
部分网络环境下无法正常解析该域名,可通过Glide自定义OkHttp客户端指定DNS或手动解析IP:
- 首先添加依赖到
build.gradle(版本需与Glide匹配):implementation 'com.squareup.okhttp3:okhttp:4.11.0' implementation 'com.github.bumptech.glide:okhttp3-integration:4.16.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0' - 创建自定义Glide模块,配置DNS:
import com.bumptech.glide.annotation.GlideModule import com.bumptech.glide.module.AppGlideModule import com.bumptech.glide.load.model.GlideUrl import com.github.bumptech.glide.integration.okhttp3.OkHttpUrlLoader import okhttp3.OkHttpClient import okhttp3.Dns import java.net.InetAddress @GlideModule class CustomGlideModule : AppGlideModule() { override fun registerComponents(context: android.content.Context, glide: com.bumptech.glide.Glide, registry: com.bumptech.glide.Registry) { val okHttpClient = OkHttpClient.Builder() .dns(Dns { hostname -> if (hostname == "volleyball.ir") { // 先通过浏览器ping volleyball.ir获取真实IP,替换此处 listOf(InetAddress.getByName("185.220.101.10")) } else { Dns.SYSTEM.lookup(hostname) } }) .build() registry.replace(GlideUrl::class.java, java.io.InputStream::class.java, OkHttpUrlLoader.Factory(okHttpClient)) } }
3. 处理Glide模块警告
上述自定义模块已包含@GlideModule注解,配合添加的compiler依赖,可解决Failed to find GeneratedAppGlideModule的警告。
4. 清除Glide缓存
若缓存导致异常,可调用以下代码清除缓存:
Glide.get(G.context).clearDiskCache() Glide.get(G.context).clearMemory()
内容的提问来源于stack exchange,提问作者Mohammad Kazemian
相关产品推荐
相关产品推荐

