Picasso first launch does not call onBitmapLoaded in for loop

I have a problem with get bitmap using Picasso for for loop.

it is not called onBitmapLoaded in the first run .

second launch he called

for (int i = 0; i < 3; i++) { 
            final int k=i;
            Picasso.with(this)
                    .load(ListA.get(i).getImage()) //image
                    .resize(100, 100)
                    .transform(new ImageTrans_CircleTransform())
                    .into(new Target() {
                        @Override
                        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {                         
                            Log.i("load", "Ok " + k);   
                           //use bitmap for add marker to map                
                        }

                        @Override
                        public void onBitmapFailed(Drawable errorDrawable) {
                        }

                        @Override
                        public void onPrepareLoad(Drawable placeHolderDrawable) {
                            Log.i("load", "first " + k);
                        }
                    });  
        }

Magazine

11-04 16:42:22.222  11677-11677/com.tenten I/load﹕ first___0 
11-04 16:42:22.222  11677-11677/com.tenten I/load﹕ first___1 
11-04 16:42:22.232  11677-11677/com.tenten I/load﹕ first___2 

I use picasso to get a bitmap from a list image.

I need a bitmap, not an image.

Thanks .: D

+4
source share
1 answer

Picasso , . , , GC, , , .

, -, . :

final List<Target> targets = new ArrayList<Target>();
for (int i = 0; i < 3; i++) { 
    final int k=i;
    Target target = new Target() {

        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {                         
            Log.i("Targets", "Loaded: " + k);   
            targets.remove(this);                
        }

        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
            targets.remove(this);
        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
            Log.i("Targets", "Preparing: " + k);
        }
    }
    targets.add(target);
    Picasso.with(this)
        .load(ListA.get(i).getImage()) // Start loading the current target
        .resize(100, 100)
        .into(target);  
}

, GC'd, targets .

+21

Source: https://habr.com/ru/post/1614416/


All Articles