2015-09-10 16 views
20

sto usando Glide per caricare le immagini e ho aggiunto un listener per sapere quando risorsa è pronta o se c'è stato un errore di qualsiasi tipo:Glide ascoltatore non funziona

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

L'applicazione non viene eseguito all'interno onResourceReady o onException ma se tolgo l'ascoltatore e lasciare che l'async download senza una richiamata, viene eseguito correttamente:

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

ho provato anche con GlideDrawableImageViewTarget invece di chi ascolta per ricevere i callback, ma app funziona all'interno onLoadStarted ma mai eseguito insid e onLoadCleared, onLoadFailed e onResourceReady.

+0

stai dicendo dell'ascoltatore onException e metodi onResourceReady non sono chiamati? Restituire true da questi metodi impedirà il richiamo del target, ma dovrebbero essere sempre chiamati per l'ascoltatore a prescindere. –

+0

Penso che sia necessario chiamare 'submit' per iniziarlo a iniziare il caricamento –

risposta

1

Ran nella stessa questione. Avere onResourceReady return false ha fatto il trucco per me.

+0

ha i codici ?? – styler1972

+0

@ styler1972 Ho aggiunto il mio codice, se si desidera guardare. Sembra funzionare bene sul mio caso. –

1

Ecco un modo per farlo:

 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

E 'strano, l'aggiunta di .submit() sembra aver risolto il problema sulla mia estremità. Qualche idea su quale cambiamento è stato fatto che causa .load (...) di non lavorare più direttamente? I documenti stanno venendo in bianco per me. –

+0

Penso che sia necessario avviarlo ad un certo punto, perché senza un bersaglio (o semplicemente dicendo di farlo), non sa quando eseguire l'operazione. –

Problemi correlati