ImageLoaderと同じurlロードの問題
2275 ワード
最近のプロジェクトではImageLoaderを使ってネット画像をロードする際に問題があり、urlを手に入れて画像を取得する際にコールバックが実行されない現象があります
メソッドが4回呼び出される場合があり,コールバックが3回実行される場合があり,コールバックが来ないたびにurlが同じ場合にのみ発生することが4回発見される場合がある.
資料を探してみると、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 onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage);
bitmaps.add(loadedImage);
}
});
}
メソッドが4回呼び出される場合があり,コールバックが3回実行される場合があり,コールバックが来ないたびにurlが同じ場合にのみ発生することが4回発見される場合がある.
資料を探してみると、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);
}
});
}