最近项目用到使用ImageLoader加载网络图片的时候碰到了问题,在拿到url去获取图片的时候有回调没有执行的现象
private void loadImgFromNet(String url){
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.avatar_def)
.showImageForEmptyUri(R.drawable.avatar_def)
.showImageOnFail(R.drawable.avatar_def)
.cacheInMemory(true)
.cacheOnDisc(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(new SimpleBitmapDisplayer())
.build();
ImageLoader.getInstance().loadImage(url,options,new SimpleImageLoadingListener(){
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage);
bitmaps.add(loadedImage);
}
});
}
有时候方法被调用了4次,回调有时候执行3次有时候4次 发现每次回调不来只会发生在url相同的情况下
查找资料后发现,ImageLoader会对url做去重 对重复请求 会回调到onLoadingCancelled
所以在onLoadingCancelled做了如下处理,获得了正确的结果
private void loadImgFromNet(String url){
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.avatar_def)
.showImageForEmptyUri(R.drawable.avatar_def)
.showImageOnFail(R.drawable.avatar_def)
.cacheInMemory(true)
.cacheOnDisc(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(new SimpleBitmapDisplayer())
.build();
ImageLoader.getInstance().loadImage(url,options,new SimpleImageLoadingListener(){
@Override
public void onLoadingCancelled(String imageUri, View view) {
super.onLoadingCancelled(imageUri, view);
loadImgFromNet(imageUri);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage);
bitmaps.add(loadedImage);
}
});
}