2015-09-10 5 views
20

I Glide bin mit Bilder zu laden und ich hinzugefügt einen Zuhörer zu wissen, wann Ressource bereit ist, oder wenn ein Fehler jeglicher Art war:Glide Hörer funktioniert nicht

Glide.with(mContext) 
    .load(url) 
    .placeholder(R.drawable.glide_placeholder) 
    // use dontAnimate and not crossFade to avoid a bug with custom views 
    .dontAnimate() 
    .diskCacheStrategy(DiskCacheStrategy.ALL) 
    .listener(new RequestListener<String, GlideDrawable>() { 
     @Override 
     public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { 
      // do something 
      return true; 
     } 

     @Override 
     public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { 
      // do something 
      return true; 
     } 
    }) 
    .into(mCustomImageView); 

Die App nie innen läuft onResourceReady oder onException aber wenn ich den Hörer abnehmen und ohne einen Rückruf von dem Asynchron-Download lassen, läuft es richtig:

Glide.with(mContext) 
    .load(url) 
    .placeholder(R.drawable.glide_placeholder) 
    // use dontAnimate and not crossFade to avoid a bug with custom views 
    .dontAnimate() 
    .diskCacheStrategy(DiskCacheStrategy.ALL) 
    .into(mCustomImageView); 

ich mit GlideDrawableImageViewTarget auch versucht, anstatt Zuhörern Rückrufe zu empfangen, aber App läuft onLoadStarted innen aber nie insid läuft e onLoadCleared, onLoadFailed und onResourceReady.

+0

Sie sagen, dass die Zuhörer OnException und onResourceReady Methoden aufgerufen werden nicht wahr? Die Rückgabe von true aus diesen Methoden verhindert, dass das Target aufgerufen wird, aber sie sollten immer für den Listener aufgerufen werden. –

+0

Ich denke, Sie müssen 'submit' aufrufen, um es einzuleiten, um zu laden –

Antwort

1

Ran in das gleiche Problem. OnResourceReady return false hat den Trick für mich gemacht.

+0

hat die Codes ?? – styler1972

+0

@ styler1972 Ich habe meinen Code hinzugefügt, wenn Sie suchen möchten. Scheint in meinem Fall gut zu funktionieren. –

1

Hier ist eine Möglichkeit, es zu tun:

 Glide.with(context).load(...) 
       .listener(object : RequestListener<Drawable> { 
        override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean { 
         //TODO handle error images while loading photo 
         return true 
        } 

        override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean { 
         //TODO use "resource" as the photo for your ImageView 
         return true 
        } 

       }).submit() 
+0

Huh, das ist seltsam, Hinzufügen .submit() scheint das Problem an meinem Ende behoben zu haben. Irgendeine Idee, welche Änderung gemacht wurde, die bewirkt, dass .load (...) nicht mehr direkt funktioniert? Die Unterlagen sind für mich leer. –

+0

Ich denke, Sie müssen es zu einem bestimmten Zeitpunkt einleiten, denn ohne ein Ziel (oder nur zu sagen, es zu tun), weiß es nicht, wann die Operation durchzuführen ist. –