排球网络图像视图和请求标头

时间:2015-06-12 09:32:45

标签: android json lotus-domino android-volley

我有网络图像视图,当我以JSON格式从服务器获得响应时,应该填充该网页图像视图。

我在json中找回了一个URL,然后转到URL并在android的列表视图中显示该图像。但是,如果我使用在互联网上公开托管的任何图像,这可以正常工作。

在我看来,服务器在IBM Domino上,一切都在多米诺骨牌数据库中。除非我拥有用户凭据,否则URL将无法打开。

对于使用volley的一般请求响应,我在请求标头中设置会话ID,告诉多米诺骨牌服务器我已经验证了自己。但是,在网络图像视图的情况下,我无法继续,因为我不知道如何使用服务器验证自己。

图片没有显示在列表视图中,我在logcat中看到了以下内容

SkImageDecoder::Factory returned null 

我试图在浏览器中打开相同的URL,它询问我的用户ID密码,如果我登录,我可以在我的系统上下载jpg文件。

有没有办法为网络图片视图设置我的http请求标头?在这种情况下我该如何处理?请帮忙

由于

2 个答案:

答案 0 :(得分:6)

NetworkImageView使用ImageLoader使用makeImageRequest在内部ImageRequests

ImageRequestRequest延伸。 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

        }
    };

}
  }