2014-05-09 144 views
2

我的服務器上有一個文件目錄,其中包含圖像。圖像的名稱與項目表相關聯。項目ID#1,將具有對應的圖像「1.png」。檢查服務器上是否存在圖像文件(Android)

不是所有的項目都有圖像,所以如果應用程序檢查,它會發現一些沒有。在這種情況下,我想要一個if檢查來顯示默認圖像。

我的問題:只有URL可用,我該如何檢查url是否導致圖像或如果它導致nothing/blank/null?

+0

除了Android的細節,比如網絡線程問題,你可以找到在這個Java問題的解決方案的核心是:http://stackoverflow.com/questions/1378199/how-to-檢查是否存在或返回404-with-java - 雖然基本機制是使用HttpURLConnection的getResponseCode()方法,但需要花時間閱讀所有答案,因爲它們指出了各種潛在的問題要知道。 –

回答

1

假設你正在談論你在哪裏試圖獲取通過HTTP/HTTPS的圖像的場景......

簡單的方法是隻嘗試獲取圖像。然後您檢查響應以查看響應狀態代碼是什麼以及內容類型是什麼。如果他們分別是200和「image/png」,那麼你就有了這個圖像。如果狀態碼是404則圖像不存在。如果兩者都不是,那麼在服務器端「合理的出錯」是合理的假設。

鏈接的問題有做這種事情的代碼。


問題是,當您嘗試獲取不存在的圖像時,您在某種程度上依賴於服務器執行的操作。它可以振振有詞:

  • 替代自有
  • 返回錯誤頁面,有或沒有設置404個狀態碼
  • 您重定向到一個錯誤頁面,這意味着狀態碼將默認圖像是3xx,
  • 失敗,導致5xx響應,或者甚至是
  • 似乎成功但返回一個空的正文或實際內容與響應「content-type」標題不匹配的主體。

如果您實施了服務器,或者您正在與實施者直接打交道,那麼您可以假定它將執行什麼操作。但是,如果你的代碼必須對任何服務器工作,那麼它需要更復雜......並且更具防禦性。

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.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

相關問題