web-dev-qa-db-fra.com

Glide - ajout d'un en-tête à la demande

existe-t-il une méthode permettant d'ajouter un en-tête personnalisé à demander lorsque l'image est téléchargée? Je peux utiliser volley ou okhttp dans Glide.

J'essaie d'ajouter un cookie à cookiemanager dans okhttpclient, mais cela n'a pas aidé.

Cordialement, Tom

16
tomi

Depuis 3.6.0 il est possible de définir des en-têtes personnalisés pour chaque requête:

GlideUrl glideUrl = new GlideUrl("url", new LazyHeaders.Builder()
    .addHeader("key1", "value")
    .addHeader("key2", new LazyHeaderFactory() {
        @Override
        public String buildHeader() {
            String expensiveAuthHeader = computeExpensiveAuthHeader();
            return expensiveAuthHeader;
        }
    })
    .build());

Glide....load(glideUrl)....;
64
TWiStErRob

Si vous ne pouvez pas le faire, vous pouvez utiliser OkHttp Interceptors .

4
Jesse Wilson

Les intercepteurs semblent être un excellent choix. Vous pouvez passer votre propre instance d'un client OkHttp à un OkHttpUrlLoader.Factory et register the Factory with Glide.

Si vous voulez plus de contrôle, vous pouvez aussi simplement fourcher le OkHttp ModelLoader et DataFetcher , enregistrer votre ModelLoader forké et obtenir un accès direct au client OkHttp pour chaque requête. 

1
Sam Judd

Veuillez lire ce fil de discussion: https://github.com/bumptech/glide/issues/198

Il semble que cela sera implémenté dans la prochaine version (4.0).

0
Naphtali Gilead
// make sure it's registered in AndroidManifest.xml as described at https://github.com/bumptech/glide/wiki/Configuration#including-a-glidemodule
public class GlideSetup implements GlideModule {
@Override public void applyOptions(Context context, GlideBuilder builder) { /* no costumization */ }
@Override public void registerComponents(Context context, Glide glide) {
    glide.register(String.class, InputStream.class, new HeaderedLoader.Factory());
}

private static class HeaderedLoader extends BaseGlideUrlLoader<String> {
    public static final Headers HEADERS = new LazyHeaders.Builder()
            .addHeader("User-Agent", USER_AGENT)
            .addHeader("App-Agent", APP_AGENT)
            .build();

    public HeaderedLoader(Context context) {
        super(context);
    }

    @Override protected String getUrl(String model, int width, int height) {
        return model;
    }

    @Override protected Headers getHeaders(String model, int width, int height) {
        return HEADERS;
    }

    public static class Factory implements ModelLoaderFactory<String, InputStream> {
        @Override public StreamModelLoader<String> build(Context context, GenericLoaderFactory factories) {
            return new HeaderedLoader(context);
        }
        @Override public void teardown() { /* nothing to free */ }
    }
}

}

et alors

....load("http://....")....;
0
Morteza Rastgoo

Essaye ça:

ImageView imgThumb = itemView.findViewById(R.id.image_thumb);

GlideUrl url = new GlideUrl("https://your-url.com", new LazyHeaders.Builder()
                .addHeader("User-Agent", "your-user-agent")
                .build());

RequestOptions options = new RequestOptions()
    .diskCacheStrategy(DiskCacheStrategy.NONE);

Glide.with(mContext).load(glideUrl)
                    .transition(withCrossFade())
                    .thumbnail(0.5f)
                    .apply(options)
                    .into(imgThumb);

La référence Glide est:

implementation 'com.github.bumptech.glide:glide:4.6.1'
0
educoutinho