wake-up-neo.com

Glide-4.0.0 Fehlender Platzhalter, Fehler GlideApp und löst den Methodenplatzhalter Fehler nicht auf

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

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 sagt, verwenden Sie GlideApp.with() statt Glide.with()

mein Anliegen ist, dass Platzhalter, Fehler, GlideApp und andere Optionen fehlen.

Ich benutze 

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

Wo mache ich was falsch? Mit Referenz hier

wie wurde GlideApp.with() verwendet?

Die API wird im selben Paket wie AppGlideModule generiert und hat standardmäßig den Namen GlideApp. Anwendungen können die API verwenden, indem sie alle Ladevorgänge mit GlideApp.with() anstelle von Glide.with() starten:

GlideApp.with(fragment)
   .load(myUrl)
   .placeholder(placeholder)
   .fitCenter()
   .into(imageView);
64
Ritesh Bhavsar

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

EDIT

Wenn .setDefaultRequestOptions(requestOptions) 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 einige weitere Änderungen in Glide-4

163
Nilesh Rathod

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 doc

Runde Bilder: CircleImageView/CircularImageView/RoundedImageView sind Es ist bekannt, dass Probleme mit TransitionDrawable (.crossFade () mit .thumbnail () oder .placeholder ()) und animierten GIFs auftreten. Verwenden Sie eine BitmapTransformation (.circleCrop () ist in Version 4 verfügbar) oder .dontAnimate (), um das Problem zu beheben.

Die neueste Update-Version compile com.github.bumptech.glide:glide:4.1.1 sollte unter dem folgenden Code verwendet werden

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

Siehe Neueste Version von glide, Fehlerkorrekturen, Funktionen

24
ND1010_

Wenn Sie GlideApp verwenden möchten, müssen Sie den Annotationsprozessor dependencies wie auf dem Screenshot hinzufügen

 how to add GlideApp to your project

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

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

Vergessen Sie nicht die @GlideModule-Annotation ..__ Dann müssen Sie ein Projekt erstellen. Und GlideApp wird automatisch generiert . Hoffe, das ist immer noch hilfreich.

9
Vlad Pylyp

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 Option "Buchse" verwendet haben, müssen Sie außerdem die Android Studio 3.0.0-Vorschau verwenden, um die folgenden ähnlichen Fehler zu vermeiden.

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

5
zhen She

Wir müssen RequestOptions auch nicht verwenden.

Die generierte API fügt eine GlideApp-Klasse hinzu, die den Zugriff auf die Unterklassen RequestBuilder und RequestOptions ermöglicht. Die RequestOptions-Unterklasse enthält alle Methoden in RequestOptions und alle in GlideExtensions definierten Methoden. Die RequestBuilder-Unterklasse ermöglicht den Zugriff auf alle Methoden in der generierten RequestOptions-Unterklasse, ohne dass dazu Folgendes verwendet werden muss:

Glide benutzen : - 

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

GlideApp verwenden : - 

Mit der generierten API können die RequestOptions-Aufrufe eingebettet werden:

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

Sie können die generierte RequestOptions-Unterklasse weiterhin verwenden, um denselben Satz von Optionen auf mehrere Lasten anzuwenden. Die generierte RequestBuilder-Unterklasse ist jedoch in den meisten Fällen praktischer.

4
Shubham Sejpal

Arbeiten

Glide.with(context!!)
     .load(user.profileImage)
     .apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
     .into(edit_profile_image)
3
Gurwinder Singh
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);
1
Trk

Wenn Sie in Ihrer App überall Platzhalter verwenden möchten, können Sie dies auf diese Weise tun.

Beim Erstellen von GlideModule aus Glide v4 können Sie diese Klasse in Ihr Projekt kopieren/einfügen, sodass Sie die Klasse GlideApp verwenden können (weitere Schritte - Folgen Sie diesem) :

@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 angeben, um sie als default festzulegen.

Wenn Sie diese Klasse erstellen, müssen Sie .placeholder nicht mit GlideApp verwenden. Sie wird automatisch angewendet.

Fühlen Sie sich frei, eine Verbindung herzustellen, wenn Sie einen Fehler erhalten. 

Vielen Dank.

0
Pratik Butani