运行Android程序时出现Glide加载失败及ClassMapper字段缺失问题
一、ClassMapper字段/Setter缺失警告
错误日志
W/ClassMapper: 在类fr.kbrown.myproject.PlantModel中未找到plant1的setter方法或字段
W/ClassMapper: 在类fr.kbrown.myproject.PlantModel中未找到plant4的setter方法或字段
解决方式
- 检查
PlantModel类,确认是否定义了plant1和plant4成员变量,变量名称需和数据源字段完全匹配(含大小写) - 若变量已存在,确保提供对应
setter方法(如setPlant1()、setPlant4());Kotlin环境下变量需声明为var,或添加@JvmField注解 - 若数据源字段名与类变量名不一致,可添加序列化注解映射,比如Gson的
@SerializedName("plant1")
二、Glide相关问题
1. GeneratedAppGlideModule未找到警告
错误日志
W/Glide: 未找到GeneratedAppGlideModule。您应在应用中添加com.github.bumptech.glide:compiler的annotationProcessor编译依赖,并实现带有@GlideModule注解的AppGlideModule,否则LibraryGlideModules将被静默忽略
解决方式
- 在Module级别的
build.gradle中添加Glide编译器依赖:
dependencies { annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0' // 版本号需与Glide核心库一致 }
- 创建自定义AppGlideModule类:
import com.bumptech.glide.annotation.GlideModule; import com.bumptech.glide.module.AppGlideModule; @GlideModule public class MyAppGlideModule extends AppGlideModule { // 无需额外实现方法,注解会自动生成必要代码 }
2. 图片加载404失败
错误日志
W/Glide: 加载尺寸为[280x280]的资源[http://myproject.fr/plant.jpg]失败
class com.bumptech.glide.load.engine.GlideException: 加载资源失败
存在1个根本原因:
com.bumptech.glide.load.HttpException(, 状态码: 404)
调用GlideException#logRootCauses(String)获取更多详情
原因(1/2):class com.bumptech.glide.load.engine.GlideException: 获取数据失败,类型为java.io.InputStream,远程资源
解决方式
- 直接在浏览器中访问图片URL
http://myproject.fr/plant.jpg,验证资源是否存在(404表示资源已删除或路径错误) - 确认URL无误后,若仍无法访问,联系后端人员排查服务器端资源状态;若URL错误,修正为正确地址
- 可给Glide添加占位图与错误图优化体验:
Glide.with(context) .load("http://myproject.fr/plant.jpg") .placeholder(R.drawable.placeholder) .error(R.drawable.error_img) .into(imageView);
三、ART代码缓存日志(无需处理)
I/art: 执行部分代码缓存收集,代码=17KB,数据=31KB
I/art: 代码缓存收集完成后,代码=17KB,数据=31KB
I/art: 将代码缓存容量提升至128KB
这是Android ART虚拟机的正常系统优化日志,无需额外处理。
内容的提问来源于stack exchange,提问作者Ibrahim komi

