我的服务器上有一个文件目录,其中包含图像。图像的名称与项目表相关联。项目ID#1,将具有对应的图像“1.png”。检查服务器上是否存在图像文件(Android)
不是所有的项目都有图像,所以如果应用程序检查,它会发现一些没有。在这种情况下,我想要一个if
检查来显示默认图像。
我的问题:只有URL
可用,我该如何检查url是否导致图像或如果它导致nothing/blank/null?
我的服务器上有一个文件目录,其中包含图像。图像的名称与项目表相关联。项目ID#1,将具有对应的图像“1.png”。检查服务器上是否存在图像文件(Android)
不是所有的项目都有图像,所以如果应用程序检查,它会发现一些没有。在这种情况下,我想要一个if
检查来显示默认图像。
我的问题:只有URL
可用,我该如何检查url是否导致图像或如果它导致nothing/blank/null?
假设你正在谈论你在哪里试图获取通过HTTP/HTTPS的图像的场景......
简单的方法是只尝试获取图像。然后您检查响应以查看响应状态代码是什么以及内容类型是什么。如果他们分别是200和“image/png”,那么你就有了这个图像。如果状态码是404则图像不存在。如果两者都不是,那么在服务器端“合理的出错”是合理的假设。
链接的问题有做这种事情的代码。
问题是,当您尝试获取不存在的图像时,您在某种程度上依赖于服务器执行的操作。它可以振振有词:
如果您实施了服务器,或者您正在与实施者直接打交道,那么您可以假定它将执行什么操作。但是,如果你的代码必须对任何服务器工作,那么它需要更复杂......并且更具防御性。
我会建议要求图像请求的主管,因为它更快。
非毕加索:
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.with(context).load(urlToImage).into(imageView).placeholder(R.drawable.user_placeholder).error(R.drawable.user_placeholder_error);
参考文献:
Apache HttpHead from Android's SDK Reference
除了Android的细节,比如网络线程问题,你可以找到在这个Java问题的解决方案的核心是:http://stackoverflow.com/questions/1378199/how-to-检查是否存在或返回404-with-java - 虽然基本机制是使用HttpURLConnection的getResponseCode()方法,但需要花时间阅读所有答案,因为它们指出了各种潜在的问题要知道。 –