在使用Glide加载图片的时候不知道你有没有遇到过第一次加载图片总是失败,试个10次有7,8次失败,通过日志能看到以下问题:
这种问题明显看出来是加载超时,那么为什么会出现这种问题呢,为什么项目中其他地方的图片加载没问题呢,第一直觉是图片地址问题,换了另外一个图片地址果然解决了,但是很多项目中图片地址都是更换不了的,那么总结一下我所试过的解决方法:
1:使用okhttp或volley作为网络栈
这种方法是网上最常见的解决方法,既:在gradle文件中增加一下代码
compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
@aar会将meta data数据自动导入androidmanifest,如果你的没有自动导入需要手动在AndroidManifest.xml文件中增加以下代码:
<meta-data
android:name="com.bumptech.glide.integration.okhttp.OkHttpGlideModule"
android:value="GlideModule" />
如果你的项目增加了混淆还需要在proguard文件增加混淆配置:
-keep class com.bumptech.glide.integration.okhttp3.OkHttpGlideModule
这样所有的配置就完成了,你可以运行下有没有解决你的图片加载问题!如果方法没有解决那么来看第二种方法。
2:使用AsyncTask
这种方法只适合整个项目其他位置的图片都没问题,就只有极个别的图片有问题的时候可以临时解决一下,直接上代码:
class MyTask extends AsyncTask<String, Integer, Bitmap> {
private String pathUrl;
public MyTask(String pathUrl){
this.pathUrl = pathUrl;
}
@Override
protected Bitmap doInBackground(String... params) {
String path = pathUrl;
ByteArrayOutputStream outputStream = null;
try {
URL url = new URL(path);
//开启连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5000);
conn.connect();
if (conn.getResponseCode() == 200) {
InputStream inputStream = conn.getInputStream();
outputStream = new ByteArrayOutputStream();
byte[] bt = new byte[8 * 1024];
int len = 0;
while ((len = inputStream.read(bt)) != -1) {
outputStream.write(bt, 0, len);
outputStream.flush();
}
byte[] array = outputStream.toByteArray();
return BitmapFactory.decodeByteArray(array, 0, array.length);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (result != null) {
civ_cardshare_head.setImageBitmap(result);
}
}
}
在需要的地方写入以下代码调用一下即可:
new MyTask(businessCard.headurl).execute();
这样便完成了,但是用的时候注意一下AsyncTask有可能会引起内存泄漏;
3:可以找后端的小伙伴看看能不能做一下图片的优化,或者使用其他的图片加载框架比如:Picasso,Fresco等等,它们都各有自己的优缺点可以学习下!
以上便是所有的心得,大家有更好的方法可以留言告诉我哦!咯咯咯~~
来源:CSDN
作者:weixin_39702651
链接:https://blog.csdn.net/weixin_39702651/article/details/103472697