2013-03-15 2 views
0

Я работаю над приложением для своей школы, и я хочу показывать новости с веб-сайта, поэтому мне нужно получить исходный код в моем приложении. Это мой код для получения HTML- Исходник- с сайта:Получить ошибку в HTTP-соединении HTTP

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; 
} 

Если у меня есть подключение к Интернету, он работает отлично, но если нет никакой связи, приложение падает. Как я могу показать ошибку в приложении, если нет подключения к Интернету, не разбирая его? (Извините за мой английский, я ученик из Германии ...)

Может ли кто-нибудь мне помочь?

Благодаря

Jonathan

ответ

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

Смежные вопросы