Picasso (Android) yükleme olaylarını nasıl dinleyebilirim?


92

Oluşturucuyu aşağıdaki gibi kullanırken Picasso'dan gelen olayları dinlemenin bir yolu var mı?

Picasso.with(getContext()).load(url).into(imageView);

Aramaya çalışıyorum requestLayout()ve invalidate()ebeveyn üzerinde GridViewdüzgün boyutlandırırız yüzden ancak bir dinleyici ayarlayın ya geri çağırma nasıl bilmiyorum.

Picasso'nun hata olayı raporlaması olduğunu görüyorum, ancak bir başarı olayı var mı?

Yanıtlar:


272

CallbackOnSuccess ve onError olaylarını almak için a kullanabilirsiniz . İsteğinize şu şekilde yeni bir Geri Arama eklemeniz yeterlidir:

Picasso.with(getContext())
    .load(url)
    .into(imageView, new com.squareup.picasso.Callback() {
                        @Override
                        public void onSuccess() {

                        }

                        @Override
                        public void onError() {

                        }
                    });

Ardından onSuccess geri aramasında herhangi bir değişiklik ve düzenleme yapabilirsiniz.


1
OnError () yürütüldüğünde hata görüntüsü nasıl gösterilir?
Jas

2
.error(R.drawable.error_placeholder_image)Hata görüntüsünü ayarlamak için kullanın
Raptor

OnSuccess'in içinden 'bu' bağlama nasıl erişebilirim? 'Bu' bağlamındaki bazı değişkenleri güncellemem gerekiyor ve ayrıca geri arama içindeki imageView'e nasıl erişebilirim? Thx
sonoluminescence

2
Bunu deneyin SınıfınızınAdı.this.yourVariable @sonoluminescence
Sofiane Hassaini

1
Bu Kotlin'de nasıl görünürdü?
Dan2899

31

Görünüme yüklenmeden önce bitmap'e erişmeniz gerekiyorsa, şunu kullanmayı deneyin:

private Target target = new Target() {
      @Override
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {       
      }
      @Override
      public void onBitmapFailed() {
      }
}

Çağrı yönteminde:

Picasso.with(this).load("url").into(target);

İdeal olarak, Hedefi doğrudan bir görünüm veya görünüm sahibi nesnesine uygularsınız.

Bu yardımcı olur umarım


imgView nerede?
Noor Hossain

@NoorHossain, bitmap yüklendiğinde görüntü bitmap'i ayarla
famfamfam

6

(Ben herhangi bir cevap yorumun için yeterli bir üne sahip olmadığından) cevaplama @Jas kullanmanız gerektiğini, MrEngineer13 cevabı yorum olarak soru takip error()kayıtları başında yöntemi Callbackde into()örneğin, yöntemin:

Picasso.with(getContext())
    .load(url)
    .error(R.drawable.error_placeholder_image)
    .into(imageView, new com.squareup.picasso.Callback() {
        @Override
        public void onSuccess() {
            //Success image already loaded into the view
        }

        @Override
        public void onError() {
            //Error placeholder image already loaded into the view, do further handling of this situation here
        }
    }
);

6

Square son zamanlarda Hedef sınıfını güncelledi ve artık geçersiz kılmak için daha fazla yöntem var ( onPrepareLoadve onBitmapFailed):

Target target = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {

    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {

    }
};

Ve yine de kullanmak zorundasın:

Picasso.with(context).load(url).into(target);

3
 private final Callback mImageCallback = new Callback() {
        @Override
        public void onSuccess() {
            startPostponedEnterTransition();
        }

        @Override
        public void onError() {
            startPostponedEnterTransition();
        }
    };

RequestCreator creator = Picasso.with(getActivity()).load(list.get(position).getId());
creator.into(imageView, mImageCallback);

0

Bunu dene

       Picasso.with(context)
            .load(services.get(position).getImageInactive())
            .into(holder.icon, new Callback() {
                @Override
                public void onSuccess() {
                    holder.imageLoad.setVisibility(View.GONE);
                }

                @Override
                public void onError() {
                    holder.icon.setImageResource(R.drawable.ic_error_image_load);
                }
            });

0

Orijinal resim görünümünü nerede kullanacağınızı bilmiyorsanız, diğer yanıtların bir tamamlayıcısı olarak, örneğin ImageView myIV:

Orijinal:

Picasso.with(activity).load(url).into(myIV);

Yeni (iç onBitmapLoaded()ait new Target()):

public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    myIV.setImageBitmap(bitmap);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.