簡體   English   中英

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

[英]Android Volley ImageLoader - How to use Basic HTTP Authorization?

我想使用Volley的NetworkImageView從我的REST API加載需要基本HTTP授權的圖像。 所以我需要向HTTP Request添加標頭。

我已經采取了以下方法:

覆蓋Request.getHeaders() - 如本問題中所述 這樣會很好,但問題是ImageLoadernew 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM