Glide加载部分图片不显示问题

本文探讨了Glide 4及以上版本中图片加载失败的原因,包括网络权限缺失、HTTPS加载问题、图片URL连接异常及数据格式错误,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Glide版本为4及其以上

图片不显示原因

  • 没有添加INTERNET网络权限
  • 老版本Glide无法加载https图片(需要使用okhttp忽略证书)
  • 图片Url无法连接
  • 图片返回数据不全且格式不正确


没有添加INTERNET网络权限


解决办法:在Manifest中添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>


图片Url无法连接


例如:http://img1.imgtn.bdimg.com/it/u=4024025292,1866147197&fm=26&gp=0.jpg
这张图片在浏览器中可以显示,但是通过网络请求下载时无法下载。这种情况下可以给Glide设置监听,Glide会在失败中返回结果,也可以设置加载失败的图片显示。

Glide.with(getBaseContext())
                    .load(url)
                    .listener(new RequestListener<Drawable>() {
                        @Override
                        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                        	Log.d("Wain","加载失败 errorMsg:"+(e!=null?e.getMessage():"null"));
                            return false;
                        }

                        @Override
                        public boolean onResourceReady(final Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                            Log.d("Wain","成功  Drawable Name:"+resource.getClass().getCanonicalName());
                            return false;
                        }
                    })
                    .error(R.mipmap.ic_launcher)
                    .into(glideIv);


图片返回数据不全且格式不正确


例如: https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1556105266988&di=c17a8c93cf525e26f62792379c3f756e&imgtype=0&src=http%3A%2F%2Fh.hiphotos.baidu.com%2Fzhidao%2Fpic%2Fitem%2Fcefc1e178a82b90165ed3854758da9773912ef11.jpg
这张图片可以通过网络请求连接,但是比较奇怪的是这是一张JPEG图片却在获取数据时显示该图片格式为GIF89a类型且该图片数据获取不完整。所以导致这张图片也无法通过Glide显示而且它会调用Glide加载成功的方法,但是如果你将这张图片下载下来放入自己的对象存储服务器上会发现该图片可以显示了。(可能是该图片所在服务器做了某种防爬虫处理)。我们可以通过HttpURLConnection 去尝试获取这张图片的内容。

try {
                    URL url = new URL(mUrl);
                    HttpURLConnection urlConnection =  (HttpURLConnection) url.openConnection();
                    BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                    String line;
                    while((line=br.readLine())!=null){
                        Log.d("xlx",line);
                    }
                    br.close();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
}

错误图片的日志
通过日志我们可以看到该图的数据部分只有一行且格式为GIF89a。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值