2015-09-12 45 views
0

我在我的项目中使用了Volley LibraryVolley ImageLoader为某些https网址提供了403个响应

我正在使用ImageLoader加载&来自https的显示图片url。

例如:

ImageLoader mImageLoader; 
ImageView mImageView; 
// The URL for the image that is being loaded. 
private static final String IMAGE_URL = 
    "https://developer.android.com/images/training/system-ui.png"; 
... 
mImageView = (ImageView) findViewById(R.id.regularImageView); 

// Get the ImageLoader through your singleton class. 
mImageLoader = MySingleton.getInstance(this).getImageLoader(); 
mImageLoader.get(IMAGE_URL, ImageLoader.getImageListener(mImageView, 
     R.drawable.def_image, R.drawable.err_image)); 

它成功,但不是所有的加载一些图片。

对于一些图片我得到以下错误响应:

BasicNetwork.performRequest: Unexpected response code 403 for https://developer.android.com/images/training/system-ui.png 

任何解决方案来解决这个问题?

+0

Post full Logcat error。尝试下载其他图像(简单的HTTP协议)。 –

+0

这是排球库错误。所以,它给了我logcat中只有这一行错误。 –

+0

国际海事组织,有时,BasicNetwork捕捉异常,但onResponse仍然呼吁,你可以看到[截图(最后一行)在我的答案](http://stackoverflow.com/questions/32478222/com-android-volley-noconnectionerror-java -net-protocolexception-unexpected-sta/32482509#32482509) – BNK

回答

1

这不是VolleyImageLoader的错。

其实我试图直接使用桶url访问亚马逊s3存储桶的图像。

虽然图像不存在于该URL,但当用户没有权限访问它时,S3会返回403而不是404。

Solved by this answer, check it for more details

+0

你的问题的网址“https://developer.android.com/images/training/system-ui.png”存在 – BNK

+0

@BNK不是真正的网址,例如,我给了它。 –

0

我试过你的代码,但它似乎为我工作得很好。

方法发送ImageRequest

private void sendImageRequest() { 
     final String IMAGE_URL = 
       "https://developer.android.com/images/training/system-ui.png"; 
     ImageRequest request = new ImageRequest(IMAGE_URL, 
       new Response.Listener<Bitmap>() { 
        @Override 
        public void onResponse(Bitmap bitmap) { 
         Log.e("Image Sucess", bitmap.toString()); 
//      mImageView.setImageBitmap(bitmap); 
         imageView.setImageBitmap(bitmap); 
        } 
       }, 0, 0, null, 
       new Response.ErrorListener() { 
        public void onErrorResponse(VolleyError error) { 
         Log.e("Image Error", error.getMessage()); 
//      mImageView.setImageResource(R.drawable.image_load_error); 
        } 
       }); 
// Access the RequestQueue through your singleton class. 
     Volley.newRequestQueue(getApplicationContext()).add(request); 
    } 

库gradle这个:

compile 'com.mcxiaoke.volley:library:1.0.19' 

和上网许可,不得以的Manifest.xml

​​

请尝试使用此代码。

谢谢。

0
上面我的意见你的问题

在一起,你可以找到更多的BasicNetwork.java:

... 
       } catch (IOException e) { 
        int statusCode = 0; 
        NetworkResponse networkResponse = null; 
        if (httpResponse != null) { 
         statusCode = httpResponse.getStatusLine().getStatusCode(); 
        } else { 
         throw new NoConnectionError(e); 
        } 
        VolleyLog.e("Unexpected response code %d for %s", statusCode, request.getUrl()); 
        if (responseContents != null) { 
         networkResponse = new NetworkResponse(statusCode, responseContents, 
           responseHeaders, false, SystemClock.elapsedRealtime() - requestStart); 
         if (statusCode == HttpStatus.SC_UNAUTHORIZED || 
           statusCode == HttpStatus.SC_FORBIDDEN) { 
          attemptRetryOnException("auth", 
            request, new AuthFailureError(networkResponse)); 
         } else { 
          // TODO: Only throw ServerError for 5xx status codes. 
          throw new ServerError(networkResponse); 
         } 
        } else { 
         throw new NetworkError(networkResponse); 
        } 
       } 

如果响应代码为403 - 禁止attemptRetryOnException()将被调用,你会得到的图像。

希望这会有所帮助!