Загрузка нескольких изображений с Пикассо на фоне

Я пытаюсь загрузить массив из 20 URL-адресов в фоновом режиме с помощью Picasso. Пока у меня есть следующий код:

Log.d("GAME", "Loading all images");
for (int i = gamePieces.length-1; i >= 0; i--) {
   GamePiece p = gamePieces[i];
   Log.d("GAME", "I will load " + p.getImage());
   Picasso.with(context).load(p.getImage()).into(target);
}
//loading the first one
Picasso.with(context).load(piece.getImage()).into(target);

И мой объект target следующий:

Target target = new Target() {
       @Override
       public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
           Log.d("GAME", "Image loaded" + ++test);
           gameImage.setImageBitmap(bitmap); //ImageView to show the images
       }

       @Override
       public void onBitmapFailed(Drawable arg0) {}

       @Override
       public void onPrepareLoad(Drawable arg0) {}
   };

Я хочу предварительно загрузить изображения, чтобы я мог показывать одно за другим в ImageView каждый раз, когда пользователь нажимает кнопку.

Первое изображение загружается так быстро (это круто), но другие изображения в цикле for никогда не загружаются. Как я могу это исправить? мне нужно, чтобы изображения начали загружаться в цикле for.


person Fernando Santiago    schedule 25.03.2015    source источник
comment
1.) ВСЕГДА где-то держите сильную ссылку на Picasso Targets, потому что сам Picasso будет хранить только WeakReference, а Target будет собирать мусор до того, как будет выполнена загрузка изображения. 2.) Я не совсем уверен, но из исходного кода кажется, что Picasso будет обрабатывать только один запрос для каждого экземпляра Target или ImageView, который вы передаете в into() - возможно, посмотрите сами, чтобы (опровергнуть) подтвердить.   -  person david.mihola    schedule 26.03.2015
comment
@david.mihola Как я могу сохранить сильную ссылку на цели Пикассо? Что вы имеете в виду, говоря, что, возможно, посмотрите сами, чтобы (опровергнуть) подтвердить, что это метод?   -  person Fernando Santiago    schedule 06.04.2015


Ответы (2)


Мне пришлось использовать: Picasso.with(getActivity().getApplicationContext()).load(p.getImage()).fetch();

Вот ссылка: https://square.github.io/picasso/2.x/picasso/com/squareup/picasso/RequestCreator.html

person Fernando Santiago    schedule 06.04.2015
comment
Ссылка на ссылку мертва. - person Biswajit Panday; 29.03.2018

возможно, вы можете попробовать сделать следующее:

Picasso mPicasso = Picasso.with(context); //Single instance

//if you are indeed loading the first one this should be in top, before the iteration.
Picasso.with(context).load(piece.getImage()).into(target);

Log.d("GAME", "Loading all images");
for (int i = gamePieces.length-1; i >= 0; i--) {

   GamePiece p = gamePieces[i];
   Log.d("GAME", "I will load " + p.getImage());
   mPicasso.load(p.getImage()).into(target); 

}

Вы всегда можете обратиться к примерам здесь

person Joel    schedule 08.04.2015