我有网络图像视图,当我以JSON格式从服务器获得响应时,应该填充该网页图像视图。
我在json中找回了一个URL,然后转到URL并在android的列表视图中显示该图像。但是,如果我使用在互联网上公开托管的任何图像,这可以正常工作。
在我看来,服务器在IBM Domino上,一切都在多米诺骨牌数据库中。除非我拥有用户凭据,否则URL将无法打开。
对于使用volley的一般请求响应,我在请求标头中设置会话ID,告诉多米诺骨牌服务器我已经验证了自己。但是,在网络图像视图的情况下,我无法继续,因为我不知道如何使用服务器验证自己。
图片没有显示在列表视图中,我在logcat中看到了以下内容
SkImageDecoder::Factory returned null
我试图在浏览器中打开相同的URL,它询问我的用户ID密码,如果我登录,我可以在我的系统上下载jpg文件。
有没有办法为网络图片视图设置我的http请求标头?在这种情况下我该如何处理?请帮忙
由于
答案 0 :(得分:6)
NetworkImageView
使用ImageLoader
使用makeImageRequest
在内部ImageRequests
ImageRequest从Request延伸。 Request
类有一个getHeaders()
方法,允许设置请求标头。
因此,如果您可以覆盖makeImageRequest
的{{1}}方法,然后在其中覆盖ImageLoader
的{{1}},则应该能够为{{1}设置请求标头}}
getHeaders()
答案 1 :(得分:0)
我尝试使用上面的ImageLoader,但似乎无法覆盖makeImageRequest
方法。
在查看Volley实现时,我无法看到相同的方法签名,所以我使用@random采用相同的方法 - 这里是CustomImageLoader
。
public class CustomImageLoader extends ImageLoader {
private Context mContext;
/**
* Constructs a new ImageLoader.
*
* @param queue The RequestQueue to use for making image requests.
* @param imageCache The cache to use as an L1 cache.
*/
public CustomImageLoader(Context aContext, RequestQueue queue, ImageCache imageCache) {
super(queue, imageCache);
mContext = aContext;
}
@Override
protected Request<Bitmap> makeImageRequest(String requestUrl, int maxWidth, int maxHeight,
ImageView.ScaleType scaleType, final String cacheKey,
final ImageRequest.Transformation transformation) {
return new ImageRequest(requestUrl, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
onGetImageSuccess(cacheKey, response);
}
}, maxWidth, maxHeight, scaleType, Bitmap.Config.RGB_565, transformation, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
onGetImageError(cacheKey, error);
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return getHeaders(mContext); //*YOUR* method for getting headers
}
};
}
}