Изображения не загружаются в android 5.0, используя библиотеку picasso

Я работаю над демонстрационным приложением, в котором я использую библиотеку Picasso v2.5.2. Он отлично работает на всех версиях операционной системы Android, но не на леденец.

Изображение размером 130 КБ, которое не загружается для меня. Изображения, размер которых меньше, загружаются правильно.

Вот мой код для загрузки растрового изображения и установки в режиме просмотра изображений.

target = new Target() {
    @Override
    public void onPrepareLoad(Drawable drawable) {}

    @Override
    public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) {
        if(bitmap != null) {
            imageView.setImageBitmap(bitmap);
        }
    }

    @Override
    public void onBitmapFailed(Drawable drawable) {}
};

Picasso.with(this).load(URL).into(target);

Я не уверен, какой дополнительный материал мне нужно сделать, чтобы я тоже работал на леденец или это ошибка в lib?

Ответы

Ответ 1

Это известная проблема. Проблема в том, что Пикассо сохраняет слабую ссылку для Target. Например, для того, чтобы заставить его работать, вы должны сделать его сильным, сохранив Target как тег представления, например.

target = new Target() {
    @Override
    public void onPrepareLoad(Drawable drawable) {}

    @Override
    public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) {
        if(bitmap != null) {
            imageView.setImageBitmap(bitmap);
        }
    }

    @Override
    public void onBitmapFailed(Drawable drawable) {}
    };

imageView.setTag(target);
Picasso.with(this).load(URL).into((Target) imageView.getTag());

EDIT:

Я предлагаю вам использовать Glide, он очень похож на Picasso, а также рекомендован Google. И, как вы можете видеть в конце этой темы, оригинальный разработчик решает эту проблему BitmapFactory с помощью дополнительного буфера.

Ответ 2

Почему вы используете Target, если вам нужно загрузить изображение в ImageView? Просто используйте это:

    Picasso.with(this).load(URL).into(imageView, new Callback()
    {
        @Override
        public void onSuccess()
        {
            //Dimiss progress dialog here
        }

        @Override
        public void onError()
        {
            //And here
        }
    });

Для документации смотрите здесь.

Ответ 3

        Picasso.with(this).load("http://webneel.com/wallpaper/sites/default/files/images/04-2013/island-beach-scenery-wallpaper.jpg").placeholder(R.mipmap.ic_launcher).fit().into(imageView, new Callback()      { 
    @Override public void onSuccess() 
    {
     } 
   @Override public void onError() 
   {
    }
     });

fit() поможет вам загрузить изображение. И используйте android: adjustViewBounds = "true" в вашем ImageView в xml.