wake-up-neo.net

Glide - Header zur Anfrage hinzufügen

gibt es eine Methode, um einen benutzerdefinierten Header hinzuzufügen, der angefordert wird, wenn ein Bild heruntergeladen wird? Ich kann in Glide Volley oder OKTTP verwenden.

Ich versuche, cookiemanager in okhttpclient einen Cookie hinzuzufügen, aber es hat nicht geholfen. Gibt es eine Methode zum Debuggen der Anforderungsantwort in Glide?

Viele Grüße Tom

16
tomi

Seit 3.6.0 können für jede Anfrage eigene Header gesetzt werden:

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

Wenn Sie Glide nicht dazu bringen können, können Sie OkHttp Interceptors verwenden.

4
Jesse Wilson

Interzeptoren klingen nach einer guten Wahl. Sie können in Ihrer eigenen Instanz eines OkHttp-Clients eine OkHttpUrlLoader.Factory und register the Factory with Glide übergeben.

Wenn Sie mehr Kontrolle wünschen, können Sie auch einfach den OkHttp ModelLoader und DataFetcher verwenden, Ihren verzweigten ModelLoader registrieren und für jede Anforderung direkten Zugriff auf den OkHttp-Client erhalten. 

1
Sam Judd

Bitte lesen Sie diesen Thread: https://github.com/bumptech/glide/issues/198

Es scheint, als würde es in der kommenden Version (4.0) implementiert.

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 */ }
    }
}

}

und dann

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

Versuche dies:

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

Die Glide-Referenz lautet:

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