Glide lädt kein echtes Bild und bleibt beim Platzhalter hängen

Lesezeit: 3 Minuten

Benutzer-Avatar
Tarek Khoury

Ich habe ein ziemlich einfaches Ladebild aus dem Serverzeilencode:

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

Aus irgendeinem Grund stecke ich immer mit dem angezeigten Platzhalter fest und nie mit dem echten Bild!

Ich habe sichergestellt, dass eine gültige und funktionierende URL übergeben wird. Und wenn ich den gleichen Code ohne den Platzhalter verwende, funktioniert es gut

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

Irgendwelche Ideen warum?

  • Aus Sicherheitsgründen lässt Android einige URLs nicht zu. Denken Sie daran, hinzuzufügen android:usesCleartextTraffic="true" in Ihrer Manifestdatei. Ausführliche Antwort gibt es hier

    – TeachMeJava

    21. Juli 2019 um 14:29 Uhr


Benutzer-Avatar
Abbes Yassine

Versuchen Sie hinzuzufügen .dontAnimate()
Es verursacht durch ÜbergangDrawable auch und es scheint so, weil es nach dem Scrollen keine Animation gibt, weil es zwischengespeichert ist.

Der richtige Code ist

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

Ich hoffe, es wird für Sie hilfreich sein.

  • Aus irgendeinem seltsamen Grund löste dies das Problem. Der Übergang ist jedoch ohne die Animation hässlich.

    – TareK Khoury

    4. April 2016 um 6:26 Uhr

  • Platzhalter ist in Glide v4.0.0 nicht vorhanden

    – Mahdi

    7. August 2017 um 10:26 Uhr

  • Wie in der README.md von Glide steht, dass CircleImageView/CircularImageView/RoundedImageView bekanntermaßen Probleme mit TransitionDrawable (.crossFade() mit .thumbnail() oder .placeholder()) und animierten GIFs haben, verwenden Sie eine BitmapTransformation (.circleCrop()). verfügbar in v4) oder .dontAnimate(), um das Problem zu beheben.

    – Veer

    29. September 2017 um 7:09 Uhr

Benutzer-Avatar
Ivo Stojanow

Überprüfen Sie, ob Sie im Manifest die Internetberechtigung hinzugefügt haben:

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

Glide löst keine Ausnahme aus, wenn keine Internetverbindung besteht.

  • In der Tat ! Dies löste das Problem für mich. Ich denke, es wäre nützlicher, wenn Glide eine Ausnahme auslöst, wenn der Entwickler einen solchen Fehler macht.

    – Thilaw Fabrice

    9. März 2017 um 9:16 Uhr

Fügen Sie android:usesCleartextTraffic=”true” im Anwendungs-Tag im Manifest hinzu und überprüfen Sie, ob die Internetberechtigung in derselben Manifestdatei erwähnt wird oder nicht:-

Verwenden Sie ProgressBar als Lade-GIF

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

Wenn jemand in Zukunft darauf stößt, müssen Sie möglicherweise hinzufügen

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

Ich bin mir des genauen Grundes für diese Änderung nicht sicher, trotzdem funktionierte mein Code ohne diese Erlaubnis nicht und funktioniert jetzt damit.

Unten ist eine seltsame Lösung, die für mich funktioniert hat.

Folgendes schlägt bei mir immer fehl (12 Versuche) – ich sehe nie das echte Bild:

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

Folgendes gelingt mir immer (12 Versuche) – ich sehe immer das reale Bild:

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) { ... }

Wie Sie sehen können, besteht der einzige Unterschied hier darin, dass ich einen Listener hinzugefügt habe. Macht wenig Sinn, aber diese Versuche wurden ziemlich sorgfältig durchgeführt, also mache ich mit.

Benutzer-Avatar
Suraj Rao

Verwenden Sie keine Übergänge oder Animationen für Glide. Es wird Ihr Problem lösen

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

1176570cookie-checkGlide lädt kein echtes Bild und bleibt beim Platzhalter hängen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy