【发布时间】:2020-12-17 14:54:47
【问题描述】:
您好,我正在尝试从 JSON 返回的 URL 下载一些图像,但如果此类请求 URL 错误,我不会从 volley 请求中得到任何响应,并且会卡在那里很长时间。我在下面包含了一个示例代码块。 FetchImage 方法在循环中被调用,但是从 URL 错误的请求中,onResponse 或 onError 块中没有响应,我无法检测到进程是否已经结束。
final RequestQueue queue = Volley.newRequestQueue(this);
progressbar.setVisibility(View.VISIBLE);
String url = Constants.API_BASE_URL
FetchImage(url, queue);
private void FetchImage(String url, RequestQueue queue) {
//get image file name
final String imageFile = utils.getFileNameFromPath(url);
final File imgDIR = new File(systemCardSavePath);
if(!imgDIR.exists()){
imgDIR.mkdirs();
}
ImageRequest imageRequest = new ImageRequest(url,
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
try{
File file = new File(imgDIR, imageFile);
if (file.exists()) {
file.delete();
}
file.createNewFile();
FileOutputStream fileoutputstream = new FileOutputStream(file);
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
response.compress(Bitmap.CompressFormat.PNG, 100, bytearrayoutputstream);
fileoutputstream.write(bytearrayoutputstream.toByteArray());
fileoutputstream.close();
cardData.put(imageFile, "1");
requestsCounter.decrementAndGet();
if (requestsCounter.get() == 0) {
progressbar.setVisibility(View.INVISIBLE);
}
}catch (FileNotFoundException exFNFE){
exFNFE.printStackTrace();
}catch (IOException exIO){
exIO.printStackTrace();
}
}
}, 0, 0, ImageView.ScaleType.CENTER_CROP, null, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//do error handling
}
});
queue.add(imageRequest);
requestsCounter.incrementAndGet();
}
【问题讨论】:
标签: android request android-volley