Glide-4.0.0 Segnaposto mancante, errore, GlideApp e non risolve il segnaposto del metodo, errore


87

Voglio usare la libreria Glide Android per scaricare un'immagine e mostrarla ImageView.

Nella versione precedente abbiamo utilizzato:

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

Ma ho visto la documentazione di Glide:

dice GlideApp.with()invece usaGlide.with()

La mia preoccupazione è un segnaposto mancante, un errore, GlideApp e altre opzioni.

sto usando

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

Dove sto sbagliando? Con riferimento a qui .

Come è GlideApp.with()stato utilizzato?

L'API viene generata nello stesso pacchetto di AppGlideModulee viene denominata GlideAppper impostazione predefinita. Le applicazioni possono utilizzare l'API avviando tutti i carichi con GlideApp.with()invece di Glide.with():

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


2
Hai idea di GlideApp? come si usa e quando si usa? .. se non si prega di
votare a

ti manca il passaggio 2 controlla questo: bumptech.github.io/glide/doc/generatedapi.html
Oussema Aroua

Segui questa documentazione bumptech.github.io/glide/doc/getting-started.html#applicatio‌ ns
Rohan Pawar

Risposte:


224

Prova a utilizzare 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);

MODIFICARE

Se .setDefaultRequestOptions(requestOptions)non funziona, usa .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);

Bonus EDIT 2

Ecco alcune altre modifiche in Glide-4


che anche io non so che @RiteshBhavsar funziona nel mio dispositivo con la nuova
libreria

@NileshRathod RequestOptions deve essere utilizzato in stile costruttore: RequestOptions requestOptions = new RequestOptions().placeholder(R.drawable.ic_placeholder).requestOptions.error(R.drawable.ic_error);
Alexander Ukhov

1
Questa è una soluzione alternativa senza GlideApp. Vai su github.com/bumptech/glide/issues/1945 per scoprire come aggiungere GlideApp.
CoolMind

c'è un modo per ottenere l'output Bitmap come quello Bitmap bitmap = Glide output
Vipul Chauhan

31

Se usi le dipendenze del pacchetto Glide compile 'com.github.bumptech.glide:glide:3.7.0', allora dovresti usare il codice seguente:

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

Nota: come nella documentazione ,

Round Pictures: CircleImageView / CircularImageView / RoundedImageView sono noti per avere problemi con TransitionDrawable (.crossFade () con .thumbnail () o .placeholder ()) e GIF animate, usa un BitmapTransformation (.circleCrop () sarà disponibile in v4) o .dontAnimate () per risolvere il problema.

L'ultima versione aggiornata compile com.github.bumptech.glide:glide:4.1.1quindi dovrebbe essere quella di utilizzare il codice seguente:

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

Guarda l'ultima versione di glide, correzioni di bug e funzionalità .


glide è una libreria così strana da usare che non hanno aggiornato su GitHub
Anand Savjani

Ya @AnandSavjani non hanno aggiornato in GitHub ma puoi trovare i loro aggiornamenti in questo link github.com/bumptech/glide/releases
ND1010_

1
Se non ti piace il glide, puoi creare il tuo modo di caricare immagini, gif che forniscono anche Caching e puoi caricarlo liberamente su GitHub e farlo sempre aggiornato
ND1010_

10

Se vuoi usare GlideApp devi aggiungere al dependenciesprocessore di annotazioni come sullo screenshot:

Come aggiungere GlideApp al tuo progetto

Quindi includi un'implementazione di AppGlideModule nella tua applicazione:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

Non dimenticare l' @GlideModuleannotazione. Quindi devi costruire il progetto. E GlideAppverrà generato automaticamente.


1
Non funzionava dopo la sincronizzazione gradle. Ma dobbiamo ricostruire per farlo funzionare.
Ravi Yadav

6

Dipendenze:

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

Aggiungi un'implementazione AppGlideModule opportunamente annotata:

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

@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}

Inoltre, se hai utilizzato l'opzione jack, per evitare i seguenti errori simili, devi utilizzare l'anteprima di Android Studio 3.0.0.

Errore: esecuzione non riuscita per l'attività ": app: transformJackWithJackForDebug". com.android.jack.ir.JNodeInternalError: java.lang.Exception: java.lang.AssertionError: non ancora implementato


6

Non abbiamo bisogno di usare anche RequestOptions.

L'API generata aggiunge una classe GlideApp, che fornisce l'accesso alle sottoclassi RequestBuilder e RequestOptions. La sottoclasse RequestOptions contiene tutti i metodi in RequestOptions e tutti i metodi definiti in GlideExtensions. La sottoclasse RequestBuilder fornisce l'accesso a tutti i metodi nella sottoclasse RequestOptions generata senza dover utilizzare apply:

Utilizzando Glide : -

Una richiesta senza l'API generata potrebbe essere simile a questa:

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

Utilizzando GlideApp : -

Con l'API generata, le RequestOptionschiamate possono essere inline:

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

È comunque possibile utilizzare la sottoclasse RequestOptions generata per applicare lo stesso insieme di opzioni a più caricamenti, ma la sottoclasse RequestBuilder generata può essere più conveniente nella maggior parte dei casi.


4

Lavorando

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

2

Se desideri utilizzare un segnaposto comune ovunque nella tua app, puoi farlo in questo modo:

Poiché stiamo creando GlideModule da Glide v4 , puoi copiare / incollare questa classe nel tuo progetto in modo da poter utilizzare la classe GlideApp (per ulteriori passaggi, segui questo) :

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

Puoi fornire tutte le opzioni di richiesta qui per impostarle come predefinite .

Con la creazione di questa classe non è necessario utilizzare .placeholdercon GlideApp, sarà applicata automaticamente.


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

1
Si prega di aggiungere qualche spiegazione - un semplice blocco di codice da solo non è poi così informativo
CertainPerformance
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.