在使用ImageLoader 加载图片的时候,偶尔出现错误如下:
ImageLoader Image can't be decoded [file:///..................’_480x800]
突然遇到,一脸懵逼;
这个错误,不同的手机,还不一定能复现,进过一番查找,原因:
/**
* 在Application中初始化参数
*
* @param context
*/
public static void initImageLoader(Context context) {
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions(480, 800) // 即保存的每个缓存文件的最大长宽
//.discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) //设置缓存的详细信息,最好不要设置这个
…………此次省略…………
发现在初始化的时候设置了memoryCacheExtraOptions 参数 480, 800,数字刚好吻合,再看调用的时候设置了DisplayImageOptions,具体代码如下:
public static DisplayImageOptions getOptionsHeader() {
return new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.showImageForEmptyUri(R.mipmap.ic_launcher)//为空的时候
.showImageOnFail(R.mipmap.ic_launcher)//错误的时候
.showImageOnLoading(R.mipmap.ic_launcher)//载入的时候
.build();
}
此次开启了内存缓存和磁盘缓存,当要加载的图片的尺寸参数大于初始化的参数就会出现如题错误,解决方式:
1、简单直接:把cacheInMemory、cacheOnDisk都设置为false
2、改大初始化的参数
3、显示的时候强制压缩图片尺寸小于初始化,再加载显示