2017-05-29 3 views
1

Ich bin auf ein sehr hartnäckiges Problem gestoßen. Ich bin mit dem Balg Code Bitmaps laden picasso mit:Picasso lädt das Bild beim ersten Anruf überhaupt nicht

  final Target target = new Target() { 
       @Override 
       public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
        // loaded bitmap is here (bitmap) 
        Log.i(TAG, "bitmapLoaded"); 
        imageView.setImageBitmap(bitmap); 
       } 

       @Override 
       public void onBitmapFailed(Drawable errorDrawable) { 
        Log.i(TAG, "bitmapFailed"); 
       } 

       @Override 
       public void onPrepareLoad(Drawable placeHolderDrawable) { 

       } 
      }; 

      imageView.setTag(target); 

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

Ich kenne eine Menge Fragen über picasso nicht geladen Bilder aufgrund schwachen Verweis gefragt werden, aber ich glaube nicht, dass der Fall ist, da ich folgte den in vielen Themen vorgeschlagenen Lösungen, um das Ziel wie oben zu bezeichnen.

In meinem Programm verwende ich den gleichen Code in 3 verschiedenen Klassen und in 3 verschiedenen Momenten. Was ich bemerkt habe ist, dass wenn ich diese Methode zum ersten Mal anrufe, es nicht funktioniert, aber für die nächsten Male, es funktioniert, spielt es keine Rolle, welcher der 3 Anrufe verwendet wird. Ich kann das sagen, weil ich verschiedene Nachrichten aus diesen 3 verschiedenen Methoden in das Protokoll drucke.

Irgendwelche Gedanken darüber, was vor sich geht oder habe ich etwas verpasst?

Vielen Dank im Voraus.

Antwort

0

Versuchen Sie dies mit dem asynchronen Ansatz zu erreichen.

Picasso.with(context).load(URL).into(profile, new Callback() { 
       @Override 
       public void onSuccess() { 
        new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() {//Use your "bitmap" here 

          Bitmap innerBitmap = ((BitmapDrawable) profile.getDrawable()).getBitmap(); 
        } 
       }, 100); 
      } 

Auch können Sie versuchen Glidehttps://github.com/bumptech/glide

+0

Ich habe versucht, mit Ihrem Beispiel, aber die Bitmap wurde nicht in die ImageView geladen, obwohl die run() -Methode aufgerufen wurde. –

+0

Es ist das gleiche Problem, das erste Mal, wenn ich diese Methode aufrufen, funktioniert es nicht, aber das nächste Mal es tut. Das ist seltsam. –

0

Problem zu verwenden: Das Problem ist, Picasso einen schwachen Bezug auf die Zielklasse hält und es wurde ABFALL gesammelt.

Lösung: Konvertieren Sie es in Klassenfeld, anstatt es als lokale Referenz zu verwenden.

Verwandte Themen