[英]Android Volley ImageLoader - How to use Basic HTTP Authorization?
我想使用Volley的NetworkImageView
從我的REST API加載需要基本HTTP授權的圖像。 所以我需要向HTTP Request添加標頭。
我已經采取了以下方法:
覆蓋Request.getHeaders()
- 如本問題中所述 。 這樣會很好,但問題是ImageLoader
有new ImageRequest()
硬編碼所以我不能將我的Request
實現傳遞給ImageLoader
,它不能輕易地繼承和調整(我需要重新實現的方法使用私有屬性)。
解決方案是修改Volley庫本身(我想避免的)。
使用自定義HttpClientStack -描述這里 。 使用這種方法,我將能夠攔截HTTP通信並添加必要的標頭。 但我認為這不是正確的方法 - 我放棄了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來源 (第53行)。
我也覆蓋了getHeaders()
。 到目前為止,我還沒有找到更容易做到的方法。
請參閱此示例https://github.com/njzk2/VolleyTwitter/blob/master/src/com/njzk2/twitterbrowser/TokenRequest.java重寫請求以包含Authorization標頭。
從Volley代碼中,如果不是通過覆蓋Request對象,我看不到添加自定義頭的任何方法。
此外,我不知道如何在給定Volley的結構的情況下輕松添加它,對於Images,ImageRequests是由ImageLoader創建的。
如果我要修改Volley來允許這個,我可以在ImageLoader中使用自定義類擴展ImageRequest。 但是ImageLoader中的匿名ImageRequest類使它有點復雜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.