web-dev-qa-db-fra.com

Glide pas de chargement de l'image réelle et collé avec un espace réservé

J'ai une image de charge assez basique à partir du code de ligne du serveur:

Glide.with(view.getContext()).load(url).placeholder(R.drawable.default_profile).into(view);

Pour une raison quelconque, je suis toujours coincé avec le caractère fictif affiché et jamais l'image réelle!

Je me suis assuré qu'une URL valide et fonctionnelle est passée. Et, si j'utilise le même code sans espace réservé, cela fonctionne bien

Glide.with(view.getContext()).load(url).into(view);

Des idées pourquoi?

45
TareK Khoury

essayez d’ajouter .dontAnimate() Cela est dû à TransitionDrawable également, et il semble que si, après chaque défilement, il n’ya pas d’animation car elle est mise en cache. le bon code est

Glide.with(view.getContext()).load(url).placeholder(R.drawable.default_profile).dontAnimate().into(view);

J'espère être utile pour vous

85
Abbes Yassine

Vérifiez si vous avez ajouté une autorisation Internet dans le manifeste:

<uses-permission Android:name="Android.permission.INTERNET"/>

Glide ne déclenche pas d'exception s'il n'y a pas de connectivité Internet.

37
Ivo Stoyanov

Si quelqu'un rencontre cela à l'avenir, vous devrez peut-être ajouter

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE"/>

Incertain de la raison exacte de ce changement, néanmoins mon code ne fonctionnait pas sans cette permission, et le fait maintenant.

3
user2415963

Utiliser ProgressBar comme gif de chargement

Glide.with(context).
        load(url)
        .listener(new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                progressBar.setVisibility(View.GONE);
                return false;
            }

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                progressBar.setVisibility(View.GONE);
                return false;
            }
        })
        .crossFade(1000)
        .into(imageView);
2
庄景鹏

Ne pas utiliser la transition ou l'animation pour Glide.Il va résoudre votre problème

Code:

Glide.with(context)
    .load(horizontalHappyHourList.get(position).getImage())
//  .transition(DrawableTransitionOptions.withCrossFade(400)) //Optional
    .apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.RESOURCE)
    .error(R.drawable.no_image))
    .into(holder.imageView);
1

Ci-dessous, une solution étrange qui a fonctionné pour moi.

Ce qui suit échoue toujours pour moi (12 essais) - Je ne vois jamais la vraie image:

Glide.with(context)
 .load(url)
 .asBitmap()
 .into(new SimpleTarget<Bitmap>(iconWidth, iconHeight) { ... }

Ce qui suit me réussit toujours (12 essais) - Je vois toujours la vraie image:

Glide.with(context)
 .load(url)
 .asBitmap()
 .listener(new RequestListener() {
    public boolean onException(Exception e,Object o,Target t,boolean b)
               {return false;}
    public boolean onResourceReady(Object o,Object p,Target t,boolean b,boolean c)  
               {return false;}})
 .into(new SimpleTarget<Bitmap>(iconWidth, iconHeight) { ... }

Comme vous pouvez le constater, la seule différence est que j'ai ajouté un auditeur. Cela n'a aucun sens, mais ces essais ont été faits avec beaucoup de soin, alors je vais avec.

1
Joseph Johnson

Aucune des solutions ci-dessus n'a fonctionné pour moi. La question peut être à la espace réservé que vous utilisez. Si la vue que vous utilisez pour charger l'image comporte un espace réservé, cela pose certains problèmes. Supprimer cet espace réservé pour une raison quelconque semble résoudre le problème.

Ainsi, si la vue (Image) que vous essayez de gonfler a un espace réservé, tel que Android: src = "@ mipmap/placeholder", supprimez-le.

        <ImageView
            Android:id="@+id/imgGallery"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_centerHorizontal="true"
            Android:adjustViewBounds="true"
            Android:scaleType="centerCrop"
            Android:src="@mipmap/rugova1" />

comme ça

 <ImageView
            Android:id="@+id/imgGallery"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_centerHorizontal="true"
            Android:adjustViewBounds="true"
            Android:scaleType="centerCrop"
            />

Cela a fonctionné pour moi.

0
Bleron Qorri

Cela semble étrange, mais la seule chose que je puisse deviner, c'est que votre URL est valide, comme vous l'avez déjà dit. Votre télécommande est en train d'être téléchargée même si elle est appliquée à votre vue d'image, mais votre espace réservé la cache en quelque sorte. Glide a quelques bugs liés à des espaces réservés.

Ma suggestion serait d'essayer ci-dessous:

Glide.with(view.getContext()).load(url).
placeholder(R.drawable.default_profile).fitCenter().into(view);

Donc, le truc est que l’espace réservé est défini via setImageDrawable() de sorte que le ImageView l’affiche normalement, mais vous dites à Glide d’utiliser explicitement le fitCenter qui conviendra à l’image chargée. joliment dans les dimensions de la ImageView via une transformation, puis définissez-la via setImageDrawable(). Puisque l'image ajustée est parfaitement ajustée, le centre dessine simplement l'image couvrant toute la zone de la vue.

Essaie.

0
theJango