32

画像のダウンロード時にリクエストするカスタム ヘッダーを追加する方法はありますか? Glide でボレーまたは okhttp を使用できます。

okhttpclient の cookiemanager に cookie を追加しようとしましたが、役に立ちませんでした。

Glide でリクエスト応答をデバッグする方法はありますか?

4

8 に答える 8

14

これを試して:

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

グライドのリファレンスは次のとおりです。

implementation 'com.github.bumptech.glide:glide:4.6.1'
于 2018-09-13T00:40:58.763 に答える
4

Glide で実行できない場合は、OkHttp Interceptorsを使用できます。

于 2015-01-23T13:00:04.473 に答える
1
// 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 */ }
    }
}

}

その後

....load("http://....")....;
于 2015-05-27T09:54:22.430 に答える
1

インターセプターは素晴らしい選択のように思えます。OkHttp クライアントの独自のインスタンスを OkHttpUrlLoader.Factory に渡し、Factory を Glideに登録できます。

さらに制御が必要な場合は、単にOkHttp ModelLoaderDataFetcherをフォークし、フォークした ModelLoaderを登録して、リクエストごとに OkHttp クライアントに直接アクセスすることもできます。

于 2015-01-29T05:44:08.623 に答える
0

このスレッドをお読みください: https://github.com/bumptech/glide/issues/198

次のリリース (4.0) で実装されるようです。

于 2015-03-08T20:11:13.510 に答える