Glide-4.0.0 Fehlender Platzhalter, Fehler, GlideApp und Auflösung des Methodenplatzhalters, Fehler

82

Ich möchte die Glide Android-Bibliothek verwenden, um ein Bild herunterzuladen und es anzuzeigen ImageView.

In der vorherigen Version haben wir verwendet:

Glide.with(mContext).load(imgUrl)
                .thumbnail(0.5f)
                .placeholder(R.drawable.PLACEHOLDER_IMAGE_NAME)
                .error(R.drawable.ERROR_IMAGE_NAME)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageView);

Aber ich habe Glide-Dokumentation gesehen:

es heißt GlideApp.with()stattdessen verwendenGlide.with()

Mein Anliegen ist ein fehlender Platzhalter, Fehler, GlideApp und andere Optionen.

ich benutze

 compile 'com.github.bumptech.glide:glide:4.0.0'

Wo mache ich falsch? Mit Bezug auf hier .

Wie GlideApp.with()wurde verwendet?

Die API wird im selben Paket wie die generiert AppGlideModuleund ist GlideAppstandardmäßig benannt. Anwendungen können die API verwenden, indem sie alle Ladevorgänge GlideApp.with()anstelle von starten Glide.with():

GlideApp.with(fragment)
   .load(myUrl)
   .placeholder(placeholder)
   .fitCenter()
   .into(imageView);
Ritesh Bhavsar
quelle
1
Mögliches Duplikat von Platzhalter / Fehler / Fallback in Glide v4
Oussema Aroua
2
Haben Sie eine Idee zu GlideApp? wie man es benutzt und wann man es benutzt? .. wenn nicht bitte upvote
Ritesh Bhavsar
Sie vermissen Schritt 2 Überprüfen Sie dies : umptech.github.io/glide/doc/generatedapi.html
Oussema Aroua
Folgen Sie dieser Dokumentationumptech.github.io/glide/doc/getting-started.html#applicatio‌ ns
Rohan Pawar

Antworten:

217

Versuchen Sie es mit RequestOptions :

RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.ic_placeholder);
requestOptions.error(R.drawable.ic_error);

Glide.with(context)
     .setDefaultRequestOptions(requestOptions)
     .load(url).into(holder.imageView);

BEARBEITEN

Wenn .setDefaultRequestOptions(requestOptions)dies nicht funktioniert, verwenden Sie .apply(requestOptions):

Glide.with(MainActivity.this)
            .load(url)
            .apply(requestOptions)
            .into(imageview);
 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
            .into(imageview);

 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(RequestOptions.placeholderOf(R.drawable.booked_circle).error(R.drawable.))
            .into(imageview);

EDIT 2 Bonus

Hier sind einige andere Änderungen in Glide-4

Nilesh Rathod
quelle
dass ich auch nicht weiß, @RiteshBhavsar es funktioniert in meinem Gerät mit neuer Glide lib Sie können es überprüfen
Nilesh Rathod
@NileshRathod RequestOptions sollte im Builder-Stil verwendet werden: RequestOptions requestOptions = new RequestOptions().placeholder(R.drawable.ic_placeholder).requestOptions.error(R.drawable.ic_error);
Alexander Ukhov
1
Dies ist eine Problemumgehung ohne GlideApp. Unter github.com/bumptech/glide/issues/1945 erfahren Sie, wie Sie GlideApp hinzufügen.
CoolMind
Gibt es eine Möglichkeit, eine Bitmap-Ausgabe wie diese zu erhalten? Bitmap-Bitmap = Glide-Ausgabe
Vipul Chauhan
30

Wenn Sie Glide-Paketabhängigkeiten compile 'com.github.bumptech.glide:glide:3.7.0'verwenden, sollten Sie den folgenden Code verwenden:

GlideApp
    .with(your context)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_image)
    .error(R.drawable.error_image)
    .into(myImageView);

Hinweis: Wie in der Dokumentation ,

Runde Bilder: CircleImageView / CircularImageView / RoundedImageView haben bekanntermaßen Probleme mit TransitionDrawable (.crossFade () mit .thumbnail () oder .placeholder ()) und animierten GIFs. Verwenden Sie eine BitmapTransformation (.circleCrop (), die in Version 4 verfügbar sein wird .dontAnimate (), um das Problem zu beheben.

Die neueste aktualisierte Version compile com.github.bumptech.glide:glide:4.1.1sollte dann den folgenden Code verwenden:

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

Glide.with(this)
     .load(url)
     .apply(options)
     .into(imageView);

Sehen Sie sich die neueste Version von Glide, Fehlerkorrekturen und Funktionen an .

ND1010_
quelle
Glide ist eine so seltsame Bibliothek, dass sie nicht auf Github aktualisiert wurde
Anand Savjani
Ya @AnandSavjani sie haben nicht in GitHub aktualisiert, aber Sie können ihre Aktualisierungen in diesem Link finden github.com/bumptech/glide/releases
ND1010_
1
Wenn Sie nicht gleiten möchten, können Sie Ihre eigene Methode zum Laden von Bildern erstellen, GIF, die auch Caching bereitstellen, und Sie können es frei in Github hochladen und immer aktualisieren
ND1010_
10

Wenn Sie GlideApp verwenden möchten, müssen Sie den dependenciesAnmerkungsprozessor wie im Screenshot hinzufügen :

So fügen Sie Ihrem Projekt GlideApp hinzu

Fügen Sie dann eine AppGlideModule-Implementierung in Ihre Anwendung ein:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

Vergessen Sie nicht die @GlideModuleAnmerkung. Dann müssen Sie ein Projekt erstellen. Und GlideAppwird automatisch generiert.

Vlad Pylyp
quelle
1
Nach dem Sync Gradle funktionierte es nicht. Aber wir müssen neu bauen, damit es funktioniert.
Ravi Yadav
6

Abhängigkeiten:

compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'

Fügen Sie eine entsprechend kommentierte AppGlideModule-Implementierung hinzu:

import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;

@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}

Wenn Sie die Jack-Option verwendet haben, müssen Sie außerdem die Vorschau von Android Studio 3.0.0 verwenden, um die folgenden ähnlichen Fehler zu vermeiden.

Fehler: Ausführung für Task ': app: transformJackWithJackForDebug' fehlgeschlagen. com.android.jack.ir.JNodeInternalError: java.lang.Exception: java.lang.AssertionError: Noch nicht implementiert

zhen sie
quelle
6

Wir müssen RequestOptions auch nicht verwenden.

Die generierte API fügt eine GlideApp-Klasse hinzu, die Zugriff auf die Unterklassen RequestBuilder und RequestOptions bietet. Die Unterklasse RequestOptions enthält alle Methoden in RequestOptions und alle in GlideExtensions definierten Methoden. Die RequestBuilder-Unterklasse bietet Zugriff auf alle Methoden in der generierten RequestOptions-Unterklasse, ohne apply verwenden zu müssen:

Verwenden von Glide : -

Eine Anforderung ohne die generierte API könnte folgendermaßen aussehen:

Glide.with(fragment)
    .load(url)
    .apply(centerCropTransform()
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.error)
        .priority(Priority.HIGH))
    .into(imageView);

Verwenden von GlideApp : -

Mit der generierten API können die RequestOptionsAufrufe eingebunden werden:

GlideApp.with(fragment)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .priority(Priority.HIGH)
    .into(imageView);

Sie können weiterhin die generierte RequestOptions-Unterklasse verwenden, um denselben Optionssatz auf mehrere Ladevorgänge anzuwenden. Die generierte RequestBuilder-Unterklasse ist jedoch in den meisten Fällen möglicherweise praktischer.

Shubham Sejpal
quelle
4

Arbeiten

Glide.with(context!!)
     .load(user.profileImage)
     .apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
     .into(edit_profile_image)
Gurwinder Singh
quelle
2

Wenn Sie überall in Ihrer App einen gemeinsamen Platzhalter verwenden möchten, können Sie dies folgendermaßen tun:

Während wir GlideModule aus Glide v4 erstellen , können Sie diese Klasse in Ihr Projekt kopieren / einfügen, damit Sie die GlideApp- Klasse verwenden können (für weitere Schritte - folgen Sie diesen Anweisungen ) :

@GlideModule
public class SampleGlideModule extends AppGlideModule {
    @Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        super.applyOptions(context, builder);
        builder.setDefaultRequestOptions(new RequestOptions().placeholder(R.drawable.logo).error(R.drawable.logo));
    }

    @Override
    public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
        super.registerComponents(context, glide, registry);
    }
}

Sie können hier alle Anforderungsoptionen als Standard festlegen .

Durch die Schaffung dieser Klasse , die Sie nicht verwenden müssen , .placeholdermit GlideApp, wird es automatisch angewendet werden.

Pratik Butani
quelle
1
RequestOptions options = new RequestOptions()
            .placeholder(R.drawable.null_image_profile)
            .error(R.drawable.null_image_profile);
    //.centerCrop()
    //.diskCacheStrategy(DiskCacheStrategy.ALL)
    //.priority(Priority.HIGH);

    Glide.with(context).load(imageUrl)
            .apply(options)
            .into(profileImage);
Trk
quelle
1
Bitte fügen Sie eine Erklärung hinzu - ein einfacher Codeblock allein ist nicht so informativ
CertainPerformance