glide加载不出大图并报错 java.net.SocketTimeoutException

来源:互联网 发布:云计算岗位多吗 编辑:程序博客网 时间:2024/06/06 01:27

      在使用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),之后就顺利加载出了超长大图



阅读全文
0 0
原创粉丝点击