在使用Glide加载图片时出现加载不出来的的问题,通过使用以下方法可以打印出错误信息:
Glide.with(context).load(url).diskCacheStrategy(DiskCacheStrategy.SOURCE)
.placeholder(R.mipmap.default_logo2)
.error(R.mipmap.default_logo2)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
e.printStackTrace();
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
})
.into(img);
打印出来的的错误信息是:java.net.SocketTimeoutException,尼玛这不是网络访问超时吗?原来Glide使用的网络加载方式不是OK HTTP,但是支持修改,通过添加依赖进行修改:
compile 'com.github.bumptech.glide:okhttp3-integration:1.5.0@aar'
这个版本具体是什么需要与你使用的OkHttp版本相符合,具体可以去该网址进行查询: https://github.com/bumptech/glide/wiki/Integration-Libraries
然后需要在AndroidManifest里面加入如下代码:
<meta-data
android:name="com.bumptech.glide.integration.okhttp3.OkHttpGlideModule"
android:value="GlideModule" />
经过上述一通操作后Glide成功的把图片的Bitmap加载出来了,但是你可能还会遇到下面的问题,比如你们的后台或者运营人员放上了一个大图(这里指超过4096x4096的图片,虽然这是不合理的,但是人家就是这么做了而且IOS可以正常加载出来,shit),此时可能会出现下面的错误信息:Bitmap too large to be uploaded into a texture
原因是Android4.0以上默认开启硬件加速,但是GPU对openGLRender(从别处看到的,大概就是视图渲染之类的)有限制(不能超过4096x4096),我在这地方使用了最偷懒的方法,关闭了加载大图的Activity的硬件加速(因为运营上传的图片巨长大约有1100x10000),之后就顺利加载出了超长大图