我的服务器上有一个带有图像的文件目录。图像的名称与项目表相关联。物品ID#1将具有相应的图像" 1.png"。
并非所有项目都有图像,因此如果应用程序检查,它们中的任何一个都找不到任何内容。在这种情况下,我希望if
检查以显示默认图像。
我的问题:只有URL
可用,如何检查网址是否会导致图片或是否导致无效/空白/空?
答案 0 :(得分:4)
我建议只是因为它更快而要求图像请求的头部。
非毕加索:
HttpClient client= new DefaultHttpClient();
HttpHead headMethod = new HttpHead(urlToImage);
HttpResponse response = client.execute(headMethod);
if(response.getStatusLine().getStatusCode== HttpStatus.SC_NOT_FOUND) {
// Image does not exist, show a placeholder or something
} else {
// load image into the view.
}
Picasso :(与头部版本无关,但这是处理它的一个简单的替代方案,也可以看看Picasso可以采取的回调来微调成功/错误)
Picasso.with(context).load(urlToImage).into(imageView).placeholder(R.drawable.user_placeholder).error(R.drawable.user_placeholder_error);
参考文献:
Apache HttpHead from Android's SDK Reference
答案 1 :(得分:1)
假设您正在谈论尝试通过HTTP / HTTPS获取图像的场景......
简单的方法是尝试获取图像。然后检查响应以查看响应状态代码是什么以及内容类型是什么。如果他们200和" image / png"然后你分别拥有了这个形象。如果状态代码为404,则图像不存在。如果两者都没有,那么一个合理的假设就是出现问题"在服务器端。
链接的问题包含执行此类操作的代码。
问题在于,当您尝试获取不存在的图像时,您在某种程度上依赖于服务器所执行的操作。这可能是合理的:
如果您实现了服务器,或者您直接与实施者打交道,那么您可以假设它将做什么。但是,如果您的代码必须与任何服务器一起工作,那么它需要更复杂......并且更具防御性。