Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在检查服务器(Android)上是否存在图像文件_Java_Android_File_Url - Fatal编程技术网

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

Java 正在检查服务器(Android)上是否存在图像文件,java,android,file,url,Java,Android,File,Url,我的服务器上有一个包含图像的文件目录。图像的名称与items表相关联。项目ID#1将具有相应的图像“1.png” 并非所有项目都有图像,因此如果应用程序检查,它将在其中一些项目上找不到任何内容。在这种情况下,我需要一个if检查来显示默认图像 我的问题:只有一个URL可用,我如何检查URL是否指向图像,或者它是否指向nothing/blank/null?假设您正在讨论一个场景,您正在尝试通过HTTP/HTTPS获取图像 简单的方法是尝试获取图像。然后检查响应,查看响应状态代码和内容类型。如果它们分

我的服务器上有一个包含图像的文件目录。图像的名称与items表相关联。项目ID#1将具有相应的图像“1.png”

并非所有项目都有图像,因此如果应用程序检查,它将在其中一些项目上找不到任何内容。在这种情况下,我需要一个
if
检查来显示默认图像


我的问题:只有一个
URL
可用,我如何检查URL是否指向图像,或者它是否指向nothing/blank/null?

假设您正在讨论一个场景,您正在尝试通过HTTP/HTTPS获取图像

简单的方法是尝试获取图像。然后检查响应,查看响应状态代码和内容类型。如果它们分别为200和“image/png”,那么您就得到了图像。如果状态代码为404,则图像不存在。如果两者都不是,那么服务器端“出了问题”是合理的假设

链接问题有做这类事情的代码


问题是,当您试图获取不存在的映像时,您在某种程度上依赖于服务器的操作。它似乎可以:

  • 替换其自身的默认图像
  • 返回错误页面,无论是否设置404状态代码
  • 将您重定向到错误页面,这意味着状态代码将为3xx
  • 失败,导致5xx响应,甚至
  • 似乎成功,但返回一个空的正文,或其实际内容与响应“content type”标题不匹配的正文

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

我建议请求图像请求的头部,因为这样更快

非毕加索:

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.
}
毕加索:(与head版本无关,但这是一个简单的处理方法,还可以查看毕加索可以用来微调成功/错误的回调)

参考资料:


除了Android的细节,如网络线程问题,您可以在这个Java问题中找到解决方案的核心:-虽然基本机制是使用HttpURLConnection的getResponseCode()方法,但请花时间阅读所有答案,因为它们指出了需要注意的各种潜在复杂性。
Picasso.with(context).load(urlToImage).into(imageView).placeholder(R.drawable.user_placeholder).error(R.drawable.user_placeholder_error);