如何解决截击请求-如果URL错误,则无响应,如何在截击请求中检测这种情况?
您好,我正在尝试从JSON返回的URL中下载一些图像,但是如果此类请求URL错误,我不会从截击请求中得到任何响应,并且只会停留很长时间。我在下面包括了一个示例代码块。 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();
}
}
},ImageView.ScaleType.CENTER_CROP,null,new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//do error handling
}
});
queue.add(imageRequest);
requestsCounter.incrementAndGet();
}
解决方法
如果网址错误或网址格式错误,或者甚至不存在,那么我们将收到BadUrl Exception。然后通过传递一些消息来处理错误。提供正确网址是我们的职责。这是开发人员的错误。这与用户无关。
,要处理不同类型的错误,我们需要如下对凌空进行适当的错误处理(错误处理的顺序也很重要):
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof TimeoutError) {
} else if(error instanceof ClientError) {
//404 error can be further traced under ClientError section
if(((NetworkResponse) ((ClientError)error).networkResponse).statusCode == 404){
}
} else if (error instanceof ServerError) {
} else if (error instanceof AuthFailureError) {
} else if (error instanceof NetworkError) {
} else if (error instanceof ParseError) {
} else if (error instanceof NoConnectionError) {
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。