web-dev-qa-db-fra.com

Glide 4.3.1: comment utiliser error ()?

Tout d'abord, quelle est la différence entre Glide et GlideApp? Ce dernier semble être généré automatiquement, mais les étapes semblaient compliquées, j'ai donc utilisé Glide à la place. Ils semblent tous deux avoir les mêmes méthodes.

J'ai donc utilisé Glide.with(activity).load(fileName).error().into(imageView). Le problème est que je ne comprends pas quoi passer à error (). Il n'a pas fallu d'ID de ressource extractible. Android Studio dit que le paramètre est RequestBuilder <Drawable!>?, Mais je n'ai trouvé aucun exemple.

"Erreur: incompatibilité de type: le type déduit est Int mais RequestBuilder <Drawable!>? Était attendu"

13
Damn Vegetables

Si vous utilisez Glide v4 alors vous devez utiliser RequestOptions pour inclure plus d'options que vous voulez, par exemple centerCrop (), espace réservé (), erreur (), priorité (), diskCacheStrategy ().

Donc, après avoir utilisé RequestOptions, votre Glide ressemblerait à ceci:

RequestOptions options = new RequestOptions()
                    .centerCrop()
                    .placeholder(R.drawable.default_avatar)
                    .error(R.drawable.default_avatar)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .priority(Priority.HIGH);

Glide.with(mContext).load(imgUrl)
                    .apply(options)
                    .into(picThumbnail);

Vous pouvez maintenant afficher l'image d'erreur et l'espace réservé définir le cache disque, etc.

GlideApp fait également partie de Glide v4. Il est utilisé pour fournir plus d'un Transformation dans Glide v4, en utilisant la méthode transforms ():

GlideApp.with(mContext)
  .load(imgUrl)
  .transforms(new CenterCrop(), new RoundedCorners(20))
  .into(target);

error () et placeholder () utilisant GlideApp -

GlideApp.with(mContext)
            .load(imageUrl)
            .placeholder(R.drawable.placeholder_image)
            .error(R.drawable.error_image)
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .priority(Priority.HIGH)
            .into(offerImage);
34
D_Alpha

Pour répondre à votre deuxième question et celle-ci fait partie du titre, vous ne devriez vraiment vous soucier de error() que si vous vous attendez à ce que l'url que vous appelez ou que drawable/bitmap soit nulle et que vous souhaitiez invoquer une nouvelle tentative , sinon vous pouvez utiliser le error drawable pour signaler un état différent par rapport à placeholder ou fallback. Le tableau suivant l'explique assez simplement: Diagram showcasing the three possible fail cases of a Glide call Malheureusement, je ne me souviens pas de la source d'origine de l'image. Veuillez me le faire savoir dans les commentaires si vous le savez afin que je puisse l'attribuer correctement à l'auteur d'origine!

Comme vous pouvez également le voir dans le tableau ci-dessus, il suffit vraiment de définir un espace réservé uniquement si vous ne souhaitez pas représenter différents états pour chacun d'eux.

J'espère que l'arbre de décision effacera certaines de vos questions! Toutes mes excuses de ne pas avoir répondu à toutes les parties de vos questions, mais certaines des autres réponses le font déjà!

À votre santé!

6
anthonymonori

Vous spécifiez un dessinable dans error() et si Glide lève une exception, cette image est affichée comme une image fictive. L'image spécifiée dans la méthode error() serait une ressource de votre projet.

Par exemple:

Glide.with(this)
            .load(urlImage)
            .error(R.drawable.error_image).into(new GlideDrawableImageViewTarget(imageView) {
                @Override
                public void onResourceReady(GlideDrawable drawable, GlideAnimation anim) {
                    super.onResourceReady(drawable, anim);
                }
            });

error (): Les Drawables d'erreur sont affichés lorsqu'une demande échoue définitivement. Les Drawables d'erreur sont également affichés si l'URL/le modèle demandé est nul et qu'aucun drawback de secours n'est défini

GlideApp.with(fragment)
  .load(url)
  .error(R.drawable.error)
  .into(view);

ou

GlideApp.with(fragment)
  .load(url)
  .error(new ColorDrawable(Color.RED))
  .into(view);
0
Jorgesys

Glide souhaite que vous transmettiez l'image à dessiner que vous devriez montrer si une erreur se produit lors du chargement. Ce paramètre n'est pas obligatoire sauf si vous l'aimez. J'utilise généralement juste.

 Glide.with(mContext).load(myModel.getDefaultThumbnailUrl()).dontAnimate().centerCrop().override(mImageSize, mImageSize).into(itemViewHolder.imgHolder);

De plus, si vous souhaitez que des rappels sur la glisse pour une erreur se produisent ou se terminent, vous pouvez créer un écouteur comme celui-ci.

 RequestListener<String, GlideDrawable> glideCallback = new RequestListener<String, GlideDrawable>(){
        @Override
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
            Toast.makeText(myActivity.this, getString(R.string.error_loading_from_url), Toast.LENGTH_LONG).show();
            return false;

        }
        @Override
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    convertCardToBitmap(mSendWhenComplete);

                }
            },500);

            return false;

        }

    };

incluez ensuite le .listener (glideCallback) dans votre appel de chargement chaîné.

les surcharges d'erreur comprennent:

enter image description here

0
Sam