2017-02-04 2 views
-2

Ich möchte das Arwork-Image in meine Benachrichtigung laden (mit MediaStyle).Wie kann ich eine Bitmap synchron mit Glide laden?

Verwendung des folgenden Codes stürzt meine Anwendung mit dem Fehler:

java.lang.IllegalArgumentException: You must call this method on a background thread

public Bitmap getAlbumArtwork(long albumID, int Height, int Width) { 
    try { 
     return Glide.with(mContext).load(getAlbumArtworkUri(albumID)).asBitmap().error(R.drawable.standardartwork).into(Width, Height).get(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

Ich bin auch bereit, um die Bibliothek zu ändern, zum Beispiel zu UniversalImageLoader, wenn nötig!

Zusätzlich

Ich benutze diese Methode das Bild um eine Benachrichtigung zu laden ... Diese Benachrichtigung in einem Dienst erstellt wird, so dass der ui nicht unterbrochen werden! Da ich keine ID der Benachrichtigungen von ImageView habe, weiß ich nicht, wie ich es anders einstellen soll! Außerdem brauche ich die Bitmap, um es zu den MediaMetaData für die MediaSession hinzuzufügen.

+0

Sie diese Methode zwingen kann, auf UI-Thread ausgeführt werden. Obwohl du das vermeiden solltest. –

+0

Hat Ihnen die Antwort geholfen? – OBX

+0

nein, ich kehrte zu meiner alten Version zurück –

Antwort

0

How can I load a Bitmap syncronously with Glide?

Wenn Sie das Netzwerk-Image aus dem Haupt-Thread (auch bekannt als UI-Thread) abzurufen die Absicht haben, das wäre ein schlecht Ansatz. Operationen, die viel Zeit benötigen, sollten von einem separaten Thread ausgeführt werden, oder im schlimmsten Fall sogar zu einem ANR-Status (Application Not Responding).

Wenn Sie die Bitmap von Glide benötigen, können Sie abrufen es in einer asynchronen Weise perfekt, das ist, wie Sie es tun:

Glide.with(mContext) 
      .load("http://example.com/imageurl") 
      .asBitmap() 
      .into(new SimpleTarget<Bitmap>() { 
       @Override 
       public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
        // you can do something with loaded bitmap here 

        // ..... 

        holder.mImageView.setImageBitmap(resource); 
       } 
      }); 
+0

Bitte sehen Sie sich meine Zusatzinformationen an! –

Verwandte Themen