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

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

我已经制定了以下方法:

覆盖Request.getHeaders() – 如此问题中所述 。 这将是好的,但问题是, ImageLoader具有new ImageRequest()硬编码,所以我不能将我的Request实现传递到ImageLoader ,它不能容易地inheritance和调整(我需要重新实现的方法使用私有属性)。

解决的办法是修改Volley库本身(我想避免)。

使用自定义HttpClientStack – 如此处所述。 使用这种方法,我将能够拦截HTTP通信,并添加必要的标题。 但我认为这不是正确的方法 – 我会放弃自动select由惠利HttpClient(姜饼与HC和IC)。


是否有一些简单的方法来实现这个我失踪?

Solutions Collecting From Web of "Android Volley ImageLoader – 如何使用基本的HTTP授权?"

我也重写了getHeaders() 。 到目前为止,我还没有find一个更容易做到这一点的方法。

请参阅此示例https://github.com/njzk2/VolleyTwitter/blob/master/src/com/njzk2/twitterbrowser/TokenRequest.java重写请求包含授权标头。

从Volley代码,我没有看到添加自定义标题的任何方式,如果不是通过重写请求对象。

而且,在Volley的结构中,我没有看到它是如何轻松添加的,至于Image,ImageRequest是由ImageLoader创build的。

如果我要修改Volley来允许这样做,我将使在ImageLoader中使用扩展ImageRequest的自定义类成为可能。 不过,ImageLoader中的匿名ImageRequest类有点复杂。

我认为HTTP堆栈是要走的路。 如果您基于SDK版本进行覆盖,就像Volley一样,不会丢失自动HttpClientselect。

  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行)。