2013-03-15 109 views
0

我正在爲我的學校申請一個應用程序,並且我想從網站上顯示新聞,所以我必須在我的應用程序中獲取源代碼。這是我從網站獲取HTML的源代碼代碼:在HTTP Url連接中獲取錯誤

public String getHTML(String urlToRead) { 
    URL url; 
    HttpURLConnection conn; 
    BufferedReader rd; 
    String line; 
    String result = ""; 
    try { 
     url = new URL(urlToRead); 
     conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     while ((line = rd.readLine()) != null) { 
      result += line; 
     } 
     rd.close(); 
    } catch (Exception e) { 
     result += e.toString(); 
    } 
    return result; 
} 

如果我有Internet連接,它工作正常,但如果沒有連接,應用程序崩潰。如何在應用程序中顯示錯誤,如果沒有連接到互聯網,而又沒有崩潰? (對不起,我是英國人,我是德國學生...)

任何人都可以幫助我嗎?

感謝

喬納森

回答

3

您需要捕捉的UnknownHostException:

除了我會改變你的方法,從連接只返回InputStream和處理與它相關的所有異常。只有嘗試閱讀或解析它,或者使用它進行其他操作。您可以獲取errorInputStream並將對象狀態更改爲錯誤(如果有)。你可以用同樣的方式解析它,只是做不同的邏輯。

我將有更多的東西一樣:

public class TestHTTPConnection { 

    boolean error = false; 

    public InputStream getContent(URL urlToRead) throws IOException { 
     InputStream result = null; 
     error = false; 
     HttpURLConnection conn = (HttpURLConnection) urlToRead.openConnection(); 
     try { 
      conn.setRequestMethod("GET"); 
      result = conn.getInputStream(); 
     } catch (UnknownHostException e) { 
      error = true; 
      result = null; 
      System.out.println("Check Internet Connection!!!"); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      error = true; 
      result = conn.getErrorStream(); 
     } 
     return result; 
    } 

    public boolean isError() { 
     return error; 
    } 

    public static void main(String[] args) { 
     TestHTTPConnection test = new TestHTTPConnection(); 
     InputStream inputStream = null; 
     try { 
      inputStream = test.getContent(new URL("https://news.google.com/")); 
      if (inputStream != null) { 
       BufferedReader rd = new BufferedReader(new InputStreamReader(
         inputStream)); 
       StringBuilder data = new StringBuilder(); 
       String line; 
       while ((line = rd.readLine()) != null) { 
        data.append(line); 
        data.append('\n'); 
       } 
       System.out.println(data); 
       rd.close(); 
      } 
     } catch (MalformedURLException e) { 
      System.out.println("Check URL!!!"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

我希望它會幫助你,祝你好運與您的項目。

+0

我認爲應該工作,謝謝! – jwandscheer 2013-03-16 11:10:59