gpt4 book ai didi

Android Volley ImageLoader - 如何使用基本 HTTP 授权?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:58:49 24 4
gpt4 key购买 nike

我想使用 Volley 的 NetworkImageView 从我的需要基本 HTTP 授权的 REST API 加载图像。所以我需要向 HTTP 请求添加 header 。

我制定了以下方法:

覆盖 Request.getHeaders() - 如 this question 中所述.这很好,但问题是 ImageLoadernew ImageRequest() 硬编码,所以我无法将我的 Request 实现传递到 ImageLoader 并且它不容易被继承和调整(我需要重新实现的方法使用私有(private)属性)。

解决方案是修改 Volley 库本身(这是我想避免的)。

使用自定义 HttpClientStack - 如所述 here .使用这种方法,我将能够拦截 HTTP 通信并添加必要的 header 。但我认为这不是正确的做法 - 我会放弃 Volley 对 HttpClient 的自动选择(Gingerbread vs. HC 和 IC)。


有没有更简单的方法来实现我所缺少的?

最佳答案

我认为 HTTP 堆栈是可行的方法。如果您根据 SDK 版本进行覆盖,就不会丢失自动 HttpClient 选择,就像 Volley 所做的那样。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
HurlStack stack = new HurlStack() {
@Override
public HttpResponse performRequest(Request<?> request, Map<String, String> headers)
throws IOException, AuthFailureError {

headers.putAll(MyApp.getAuthParams());

return super.performRequest(request, headers);
}
};

requestQueue = Volley.newRequestQueue(getApplicationContext(), stack);

} else {
HttpClientStack stack = new HttpClientStack(AndroidHttpClient.newInstance("volley/0")) {
@Override
public HttpResponse performRequest(Request<?> request, Map<String, String> headers)
throws IOException, AuthFailureError {

headers.putAll(MyApp.getAuthParams());

return super.performRequest(request, headers);
}
};

requestQueue = Volley.newRequestQueue(getApplicationContext(), stack);
}

参见 Volley source (第 53 行)。

关于Android Volley ImageLoader - 如何使用基本 HTTP 授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16919737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com