2016-07-30 40 views
1

Ich verwende Glide, um ein Bild mit seiner Ressourcen-ID in eine Bitmap zu laden, und ich möchte die Bitmap an eine Elementfunktion übergeben eine benutzerdefinierte AnsichtsklasseGleitfehler: java.lang.IllegalArgumentException - Sie müssen diese Methode auf einem Hintergrundthread aufrufen

Dies ist mein Code:

try { 
     Bitmap bm=Glide. 
       with(getApplicationContext()). 
       load(mThumbIds[position]). 
       asBitmap(). 
       into(width, height). // Width and height 
       get(); 
     drawView.setImg(bm); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 

Jedes Mal, wenn ich versuche, es mir folgende Fehlermeldung erhalten auszuführen:

Unable to start activity ComponentInfo{...}: java.lang.IllegalArgumentException: YOu must call this method on a background thread

Wie kann ich dieses Problem beheben?

+0

Mögliches Duplikat von [Wie benutzt man glide, um ein Bild in eine Bitmap zu laden?] (Http://stackoverflow.com/questions/27394016/how-does-one-use-glide-to-download-an- Bild-in-Bitmap) –

Antwort

0

Sie können get() nicht auf dem Hauptthread aufrufen, da es eine lange laufende Aufgabe ausführt und Leistungsprobleme verursachen kann.

Stattdessen betrachten Subklassen ImageViewTarget oder ViewTarget und into() statt get() verwenden. into() lädt das Bild asynchron und Sie können Ihre benutzerdefinierte Unterklasse verwenden, um die entsprechende Elementfunktion in onReasourceReady aufzurufen.

Achten Sie darauf, Ihre Bitmap (normalerweise durch Übergeben null an die Elementfunktion) zu löschen, wenn onLoadFailed oder onLoadCleared aufgerufen werden.