昨天中午遇到一个很奇葩的bug,glide就是不加载图片,而且不显示占位图片和错误图片,各种调试后还是无果;
我先描述下无法加载图片的场景; 我们的IM聊天页面给我们抛出了一个Adapter的实现接口,实现这个接口后可以在未实现的方法里面定义各种布局卡片(其实实现后就和Adapter类似);
由于这些布局卡片,由于这些卡片上的数据是动态的,每次在聊天页面加载卡片的时候就会获取网络请求,然后设置卡片布局内容;有一个比较特殊的布局,这个卡片里面需要显示头像和人名,使用RecyclerView实现的(这里还有RecyclerView嵌套RecyclerView的问题);显示头像我用的是Glide的加载圆形图片,自己封装的一个工具类
public static void glideClrcle(Context context, String urlString, ImageView imageView) { Glide.with(context) .load(urlString) .bitmapTransform(new CropCircleTransformation(context)) .placeholder(R.mipmap.person_touxiang) .error(R.mipmap.person_touxiang) .signature(new StringSignature(String.valueOf(System.currentTimeMillis()))) //不使用缓存的图片 .into(imageView); }
这个工具类在我们项目中使用的地方非常多,尴尬的是这张特殊的卡片点击后的页面和卡片上显示的头像数据是一样的,在卡片的点击进入的页面头像显示的没有问题;
最终我是用尝试的心态更改了Context的引用方式,不用这个实现接口类构造器里面的Context,采用的是Applicatio中的Context居然神奇的能够加载图片;忙了一下午总算是解决掉了,这里总结的结果是:Context传递的层级太深,导致Glide加载图片出现问题(并不会报错);在这里记录一下,希望对遇到这样问题的小伙伴,有所帮助;