2015-05-28 15 views
8

Ich arbeite an Demo-Anwendung, in der ich Picasso Bibliothek v2.5.2 benutze. Es funktioniert gut auf allen Android-Betriebssystem-Version, aber nicht in Lollipop.Bilder werden nicht geladen in Android 5.0 mit Picasso-Bibliothek

Bild, dessen Größe 130KB ist, die für mich nicht geladen wird. Bilder, deren Größe geringer ist, werden korrekt geladen.

Hier ist mein Code zum Herunterladen von Bitmap und setzen auf Imageview.

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); 

Ich bin nicht sicher, welche zusätzliche Sachen, die ich damit zu tun haben, so dass ich auch auf Lutscher arbeiten oder dies Fehler in lib?

Antwort

0

Warum würden Sie eine Target verwenden, wenn Sie nur das Bild in die ImageView laden müssen? Verwenden Sie einfach das:

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

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

Zur Dokumentation Blick here.

+0

Ich verlasse Fortschrittsdialog sobald das Bild geladen wurde. Ich hatte diese Codezeile in 'onBitmapLoaded' –

+0

@Williams meine Änderung sehen. Sie können dafür einen 'Callback' verwenden. Ich würde vorschlagen, dass Sie nur ein "Ziel" verwenden, wenn Sie es wirklich brauchen. –

+0

Okay danke, ich werde das versuchen und werde Sie für das gleiche aktualisieren. –

13

Es ist ein bekanntes Problem. Das Problem ist, dass Picasso eine schwache Referenz für die Target hält. Um es zum Laufen zu bringen, müssen Sie es stark machen, indem Sie zum Beispiel eine Target als Tag der Ansicht speichern.

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:

Ich schlage vor, Sie Glide zu verwenden, um es zu Picasso sehr ähnlich ist, und auch von Google empfohlen. Und wie Sie am Ende von this thread sehen können, löst der ursprüngliche Entwickler dieses BitmapFactory-Problem, indem er zusätzlichen Puffer verwendet.

+0

Funktioniert nicht für mich :( –

+0

selbe Ausgabe I hier aufgewachsen https://github.com/square/picasso/issues/1054 –

+0

Überprüfen Sie meine Änderungen, bitte. – rom4ek

0
 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() helfen Ihnen Bild.Und Verwendung android zu laden: adjustViewBounds = "true" in Ihrem Image in xml.

Verwandte Themen