我使用 Volley 和 NetworkImageView。这对几个项目都很有效。但是,我现在需要在标头中为我的图像请求发送身份验证令牌。做这个的最好方式是什么?在我的正常请求中,我覆盖 getHeaders() 并以这种方式放置我的令牌。但是 NetworkImageView 使用的 ImageLoader 会生成一个通用请求,因此很难添加标头......
问问题
2744 次
2 回答
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;
}
};
}
};
从技术上讲,这是一行代码:) 我已经对此进行了测试,它对我有用。
于 2014-12-16T22:47:49.667 回答
0
还没有找到一个简单的方法来做到这一点。我已经分叉了 Volley 来完成我所需要的。如果您需要,请随意使用。
https://github.com/leofirespotter/ubervolley
此处还添加了从(http://solutionforandroid.blogspot.com/2013/12/rounded-networkimageview-using-volley.html)复制的圆形 NetworkImageView
于 2014-03-24T22:10:55.747 回答