web-dev-qa-db-fra.com

Glide-4.0.0 Espace réservé manquant, erreur, GlideApp et ne résout pas son espace réservé de méthode, erreur

Je souhaite utiliser la bibliothèque Android Glide pour télécharger l'image et l'afficher dans ImageView.

dans la version précédente, nous avons utilisé:

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

Mais j'ai vu la documentation de Glide:

il dit utiliser GlideApp.with() à la place de Glide.with()

ma préoccupation est l’espace manquant, l’erreur, GlideApp et d’autres options.

J'utilise 

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

Où est-ce que je me trompe? Avec référence ici

comment GlideApp.with() a été utilisé ??

L'API est générée dans le même package que AppGlideModule et est nommée GlideApp par défaut. Les applications peuvent utiliser l'API en démarrant tous les chargements avec GlideApp.with() au lieu de Glide.with():

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

Essayez d’utiliser 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);

MODIFIER

Si .setDefaultRequestOptions(requestOptions) ne fonctionne pas, utilisez .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 

Voici quelques autres changements dans Glide-4

163
Nilesh Rathod

Si vous utilisez les dépendances du paquet Glide compile 'com.github.bumptech.glide:glide:3.7.0', utilisez le code ci-dessous. 

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

Note: Comme dans doc

Images rondes: CircleImageView/CircularImageView/RoundedImageView are connu pour avoir des problèmes avec TransitionDrawable (.crossFade () avec thumbnail () ou .placeholder ()) et avec des GIF animés, utilisez un BitmapTransformation (.circleCrop () sera disponible en v4) ou .dontAnimate () pour résoudre le problème.

Dernière version de mise à jour compile com.github.bumptech.glide:glide:4.1.1 que l'utilisation devrait utiliser le code ci-dessous

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

Voir la dernière version de glide, corrections de bugs, fonctionnalités

24
ND1010_

Si vous voulez utiliser GlideApp, vous devez ajouter au processeur d'annotation dependencies comme sur la capture d'écran.

 how to add GlideApp to your project

puis incluez une implémentation AppGlideModule dans votre application:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

N'oubliez pas l'annotation @GlideModule ..__, alors vous devez créer un projet. Et GlideApp sera généré automatiquement . J'espère que cela sera toujours utile.

9
Vlad Pylyp

les dépendances

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

ajouter une implémentation AppGlideModule annotée de manière appropriée

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


@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}

De plus, si vous avez utilisé l'option de la prise, vous devez utiliser l'aperçu de Android Studio 3.0.0 pour éviter les erreurs similaires suivantes.

Erreur: L'exécution a échoué pour la tâche ': app: transformJackWithJackForDebug' . com.Android.jack.ir.JNodeInternalError: Java.lang.Exception: Java.lang.AssertionError: Pas encore implémenté

5
zhen She

Nous n'avons pas besoin d'utiliser RequestOptions également.

L'API générée ajoute une classe GlideApp, qui permet d'accéder aux sous-classes RequestBuilder et RequestOptions. La sous-classe RequestOptions contient toutes les méthodes de RequestOptions et toutes les méthodes définies dans GlideExtensions. La sous-classe RequestBuilder permet d'accéder à toutes les méthodes de la sous-classe RequestOptions générée sans avoir à utiliser apply:

Utilisation de Glide : - 

Une demande sans l'API générée pourrait ressembler à ceci:

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

Utilisation de GlideApp : - 

Avec l'API générée, les appels RequestOptions peuvent être intégrés:

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

Vous pouvez toujours utiliser la sous-classe RequestOptions générée pour appliquer le même jeu d'options à plusieurs chargements, mais la sous-classe RequestBuilder générée peut s'avérer plus pratique dans la plupart des cas.

4
Shubham Sejpal

Travail

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

Si vous souhaitez utiliser un espace réservé commun partout dans votre application, vous pouvez le faire de cette manière.

Comme nous créons GlideModule à partir de Glide v4, vous pouvez copier/coller cette classe dans votre projet pour pouvoir utiliser la classe GlideApp (Pour plus d'étapes - Suivez ceci) :

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

Vous pouvez donner toutes les options de requête ici pour définir comme default.

En créant cette classe, vous n'avez pas besoin d'utiliser .placeholder avec GlideApp, elle s'appliquera automatiquement.

N'hésitez pas à vous connecter si vous rencontrez une erreur. 

Je vous remercie.

0
Pratik Butani