【问题标题】:Adding Authentication Headers to NetworkImageView in Volley在 Volley 中向 NetworkImageView 添加身份验证标头
【发布时间】:2014-04-29 09:29:43
【问题描述】:

我使用 Volley 和 NetworkImageView。这对几个项目都很有效。但是,我现在需要在标头中为我的图像请求发送身份验证令牌。做这个的最好方式是什么?在我的正常请求中,我覆盖 getHeaders() 并以这种方式放置我的令牌。但是 NetworkImageView 使用的 ImageLoader 会生成通用请求,因此很难添加标头...

【问题讨论】:

  • 看看我的回答。

标签: android authentication android-volley networkimageview


【解决方案1】:

我想出了一个解决方案。 为了使用 NetworkImageView,您需要创建一个图像加载器。此时代码,只需覆盖ImageLoadermakeImageRequest() 方法,在makeImageRequest() 内部,覆盖'ImageRequest' 的getHeaders() 方法:

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;
                }
            };
        }
    };

这在技术上是一行代码 :) 我已经对此进行了测试,它对我有用。

【讨论】:

  • onGetImagesSuccess() 在 ImageLoader 中有私有访问权限。
  • 为我工作。谢谢。
【解决方案2】:

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

https://github.com/leofirespotter/ubervolley

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-25
    • 2016-08-31
    • 2017-08-06
    • 1970-01-01
    • 2015-09-09
    • 2014-08-08
    • 2020-04-24
    • 2014-06-02
    相关资源
    最近更新 更多