在Volley中向NetworkImageView添加身份验证标头

Leo*_*Leo 7 authentication android android-volley networkimageview

我使用Volley和NetworkImageView.这对几个项目来说非常有用.但是我现在需要在标题中为我的图像请求发送auth令牌.做这个的最好方式是什么?在我的正常请求中,我覆盖getHeaders()并以这种方式放置我的令牌.但ImageLoView使用的ImageLoader会生成一个通用的Request,这使得很难添加标题......

Sia*_*ash 6

我想出了一个解决方案.要使用NetworkImageView,您需要创建一个图像加载器.在这一点上的代码,只需在此改变makeImageRequest()的方法ImageLoader和内部makeImageRequest(),在此改变getHeaders()"ImageRequest"的方法:

imageLoader = new ImageLoader(requestQueue,
            new ImageLoader.ImageCache() {
                private final LruCache<String, Bitmap>
                        cache = new LruCache<String, Bitmap>(20);

                @Override
                public Bitmap getBitmap(String url) {
                    return cache.get(url);
                }

                @Override
                public void putBitmap(String url, Bitmap bitmap) {
                    cache.put(url, bitmap);
                }
            }) {
        @Override
        protected Request<Bitmap> makeImageRequest(String requestUrl, int maxWidth, int maxHeight, final String cacheKey) {
            //return super.makeImageRequest(requestUrl, maxWidth, maxHeight, cacheKey);

            return new ImageRequest(requestUrl, new Response.Listener<Bitmap>() {
                @Override
                public void onResponse(Bitmap response) {
                    onGetImageSuccess(cacheKey, response);
                }
            }, maxWidth, maxHeight,
                    Bitmap.Config.RGB_565, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    onGetImageError(cacheKey, error);
                }
            }) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    HashMap<String, String> params = new HashMap<String, String>();
                    params.put("Authorization", YOUR_TOKEN);
                    return params;
                }
            };
        }
    };
Run Code Online (Sandbox Code Playgroud)

这在技术上是一行代码:)我测试了这个,它适用于我.


Leo*_*Leo 0

还没有找到一个简单的方法来做到这一点。我分叉了 Volley 来完成我所需要的。如果您有需要,请放心使用。

https://github.com/leofirespotter/ubervolley

此处还添加了从(http://solutionforandroid.blogspot.com/2013/12/rounded-networkimageview-using-volley.html)复制的圆形 NetworkImageView