2014-02-12 93 views
2

當Web服務不可用時,我需要處理異常。在我的應用程序中,我正在請求一個Web服務,它將返回給我一個XML數據。當Web服務可用時,我的應用程序正常工作。但是當Web服務不可用時,我的應用程序會崩潰,以便在java中捕獲該異常。請注意,我正在開發一個android應用程序。如何處理java中Web服務不可用的異常

當Web服務不可用,它看起來喜歡下面的圖像 enter image description here

+2

檢查響應代碼什麼爲您的情況,並添加一個檢查該響應代碼。您可能需要針對不同的響應代碼採取不同的行動。 – guptakvgaurav

回答

2

有了這個,你可以檢查Web服務提供或不

public void isAvailable(){ 

    // first check if there is a WiFi/data connection available... then: 

    URL url = new URL("URL HERE"); 
    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    connection.setRequestProperty("Connection", "close"); 
    connection.setConnectTimeout(10000); // Timeout 10 seconds 
    connection.connect(); 

    // If the web service is available 
    if (connection.getResponseCode() == 200) { 
     return true; 
    } 
    else return false; 
} 
+1

在一個真正的多線程環境中,資源可能在檢查完成後立即變得不可用(所以檢查通過),但在實際請求發生之前(因此調用失敗)。人們用文件做同樣的常見錯誤 - 檢查是否存在,然後執行一些操作,而沒有捕捉操作本身的異常。考慮到這種情況,上面的代碼對於生產使用並不是很有幫助。 – Neolisk

+0

當然我同意,它只是一個初學者級別的代碼,而不是生產..響應代碼可以由他/她自己添加任何編碼器,您可以修改我的答案,因爲您希望有經驗的編碼員 –

1

這是多麼我已經解決了這個問題的幫助的Krishna's代碼

public static boolean isAvailable(String link){ 

     boolean available = false; 

     URL url = null; 
     try { 
      url = new URL(link); 
     } catch (MalformedURLException e) { 

      e.printStackTrace(); 
     } 
     HttpURLConnection connection = null; 
     try { 
      connection = (HttpURLConnection) url.openConnection(); 
     } catch (IOException e1) { 

     } 
     connection.setRequestProperty("Connection", "close"); 
     connection.setConnectTimeout(100000); // Timeout 100 seconds 
     try { 
      connection.connect(); 
     } catch (IOException e) { 

     } 

     try { 
      if (connection.getResponseCode() == 200) { 
      // return true; 
       available = true; 
      } 
      else 
       available = false; 
       //return false; 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 

     return available; 
}