web-dev-qa-db-fra.com

Glide: onError Callback

Je passe de Picasso à Glide. Tout fonctionne bien sauf que je ne trouve pas de méthode pour obtenir un rappel d'erreur. Je veux récupérer un bitmap, le transmettre et générer une Android palette à partir de celui-ci. De plus, même si un errorDrawable peut être fourni à un appel de chargement, il n'apparaîtra pas dans onResourceReady lors de l'utilisation d'un SimpleTarget.

À Picasso, je l'ai fait comme ceci:

target = new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                //handle Bitmap, generate Palette etc. 
            }

            @Override
            public void onBitmapFailed(final Drawable errorDrawable) {
                // use errorDrawable to generate Palette
            }

            @Override
            public void onPrepareLoad(final Drawable placeHolderDrawable) {
            }
        };
        int width =  (int) DisplayUnitsConverter.dpToPx(this, 120);
        int height =  (int) DisplayUnitsConverter.dpToPx(this, 40);
        Picasso.with(this).load(config.getPathToLogo()).resize(width, height).error(errorDrawableId).into(target);

Mon code glide ressemble à ceci:

Glide.with(context)
    .load(config.getPathToLogo())
    .asBitmap()
    .into(new SimpleTarget<Bitmap>(width, height) {
         @Override
         public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
             //handle Bitmap, generate Palette etc. 
         }
    });

Merci.

13
Androidicus

Vous utilisez SimpleTarget qui implémente l'interface Target qui définit la méthode onLoadFailed, vous n'avez donc qu'à faire:

Glide.with(context)
    .load(config.getPathToLogo())
    .asBitmap()
    .into(new SimpleTarget<Bitmap>(width, height) {
         @Override
         public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
             //handle Bitmap, generate Palette etc. 
         }

         @Override
         public void onLoadFailed(Exception e, Drawable errorDrawable) {
             // Do something.
         }
    });
7
antonio

Pour tous ceux qui ont le même problème - vous devez utiliser la méthode d'écoute. Par exemple:

   Glide.with(activity)
            .load(getPhoto().getUrl())
            .apply(
                    new RequestOptions()
                            .error(R.drawable.icon_placeholder)
                            .centerCrop()
            )
            .listener(new RequestListener<Drawable>() {
                @Override
                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                 //on load failed
                    return false;
                }

                @Override
                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                    //on load success
                    return false;
                }
            })
            .transition(withCrossFade())
            .into(view);
7
Patryk Kubiak