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。