检查服务器(Android)上是否存在图像文件

时间:2014-05-09 22:26:56

标签: java android file url

我的服务器上有一个带有图像的文件目录。图像的名称与项目表相关联。物品ID#1将具有相应的图像" 1.png"。

并非所有项目都有图像,因此如果应用程序检查,它们中的任何一个都找不到任何内容。在这种情况下,我希望if检查以显示默认图像。

我的问题:只有URL可用,如何检查网址是否会导致图片或是否导致无效/空白/空?

2 个答案:

答案 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

Apache HttpStatus from Android's SDK Reference

Square Picasso

答案 1 :(得分:1)

假设您正在谈论尝试通过HTTP / HTTPS获取图像的场景......

简单的方法是尝试获取图像。然后检查响应以查看响应状态代码是什么以及内容类型是什么。如果他们200和" image / png"然后你分别拥有了这个形象。如果状态代码为404,则图像不存在。如果两者都没有,那么一个合理的假设就是出现问题"在服务器端。

链接的问题包含执行此类操作的代码。


问题在于,当您尝试获取不存在的图像时,您在某种程度上依赖于服务器所执行的操作。这可能是合理的:

  • 替换自己的默认图片
  • 返回错误页面,无论是否设置404状态代码
  • 将您重定向到错误页面,这意味着状态代码为3xx,
  • 失败,导致5xx响应,甚至
  • 似乎成功但返回一个空体,或一个实际内容与响应不匹配的身体"内容类型"报头中。

如果您实现了服务器,或者您直接与实施者打交道,那么您可以假设它将做什么。但是,如果您的代码必须与任何服务器一起工作,那么它需要更复杂......并且更具防御性。