我在我的项目中使用Volley Library
我使用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
有解决这个问题的办法吗?
我试过你的代码,但它似乎对我很好。
发送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);
}
library in gradle:
compile 'com.mcxiaoke.volley:library:1.0.19'
和Manifest.xml中的Internet权限
<uses-permission android:name="android.permission.INTERNET" />
请用这个代码试试。
谢谢。
与我在上面对你的问题的评论一起,你可以在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 - FORBIDDEN,将调用attemptRetryOnException()
,您将获得图像。
希望这对你有帮助!
不是Volley
或ImageLoader
的故障。
实际上,我试图直接使用桶url访问amazon s3桶的图像。
虽然该url中不存在image,但当用户没有访问权限时,S3返回403而不是404。
由这个答案解决,查看更多细节