2012-03-19 41 views
0

更新:Android HttpGet:在執行請求之前應該檢查哪些異常?

String xmlList = null; 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      try { 

       HttpGet request = new HttpGet(URL); 
       HttpResponse response = null; 
       response = httpClient.execute(request); 
       //HttpResponse httpResponse = httpClient.execute(request); 
       HttpEntity httpEntity = response.getEntity(); 
       xmlList = EntityUtils.toString(httpEntity); 

      } 
      catch (MalformedURLException e) { 
       xmlList = "URL: is a malformed URL"; 
       e.printStackTrace(); 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
       xmlList = "URL: UnsupportedEncodingException"; 
      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
       xmlList = "URL: ClientProtocolException"; 
      } catch (SocketTimeoutException e) { 
       e.printStackTrace(); 
       xmlList = "URL: SocketTimeoutException"; 
      } catch (ConnectTimeoutException e) { 
       e.printStackTrace(); 
       xmlList = "URL: ConnectTimeoutException"; 
      } catch (IOException e) { 
       xmlList = "URL: IOException"; 
       e.printStackTrace(); 
      } 
      finally { 
       httpClient.getConnectionManager().shutdown(); 
      } 
      // return XML 
      return xmlList; 

更新的最終

我建立一個應用程序,從網站上讀取數據,我想知道什麼是例外前應檢查執行請求?

我想到的例外:

1) bad url 
2) host not responding 
3) time out 
.... 
.... 

這裏是我的代碼:

DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpGet request = new HttpGet(SongsManager1.URL); 
HttpResponse response = null; 
response = httpClient.execute(request); 
//HttpResponse httpResponse = httpClient.execute(request); 
HttpEntity httpEntity = response.getEntity(); 
xmlList = EntityUtils.toString(httpEntity); 
+1

如何在發出請求之前檢查主機是否未響應(與超時有何不同)? – 2012-03-19 00:50:28

+0

你的主機沒有響應和超時是一樣的,沒想到:) – 2012-03-19 01:10:26

回答

0

你可以做以下檢查,

  1. ClientProtocolException
  2. IOException - 這在內部捕獲了很多異常。您可以在Android文檔檢查出的細節
  3. 的URISyntaxException

您可以發送請求之前做一個網絡連接檢查。詳細信息在zapl的文章中提供的鏈接中。

+0

我已經更新了我的問題,是捕捉異常的正確方法? – 2012-03-19 03:08:52

+0

這是很多捕獲,但看起來不錯。只有當你想在每種情況下分別做一些不同的事情時,你才需要抓住它們。我假設你想告訴用戶到底爲什麼請求失敗。在這種情況下,這看起來很好。 :) – Shubhayu 2012-03-19 04:52:23

1

您可以檢查是否有network connectivity,如果不顯示一條消息給用戶,無論應用程序嘗試是不可能的。 但任何進一步的檢查是不必要的,因爲你看你從你的查詢結果得到了什麼:異常(如不良URL,超時,..),狀態代碼等

相關問題