2011-06-14 6 views
0

사용자로부터 URL을받는 코드를 작성하려고했는데 제출 버튼을 클릭하면 URL을 받아 전화를 걸고 HTML 소스 코드를 페이지에서 검색하십시오.안드로이드 응용 프로그램에서 URL로 html 소스 코드 받기

W/System.err에 (14858) : android.os.NetworkOnMainThreadException W/System.err에 (14858) : android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork에서 (그러나, 나는 다음의 예외를 입수했습니다 StormMode.java:1077)

안드로이드 3.0에서 개발하려고하는 플랫폼이 메인 메소드에서 네트워크 리소스를 사용할 수없는 것으로 보입니다. 백그라운드에서 실행하거나 비동기 메서드를 사용해야하는 등의 메서드가 있다는 것을 알고 있지만 아무도 나를 안내 할 수 있습니까? 나는 그것에 대해 어떻게 가는지에 대해 너무 확신하지 못한다. 프로그래밍에 익숙하지 않습니다. 미리 감사드립니다.

는 아래의 onclick 방법에 내 현재 코드 :

String htmlCode = ""; 

    try { 
    URL url = new URL("http://www.google.com"); 
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 

    String inputLine; 

    while ((inputLine = in.readLine()) != null) { 
     htmlCode += inputLine; 
     Log.d(LOG_TAG, "html: " + inputLine); 
    } 

    in.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.d(LOG_TAG, "Error: " + e.getMessage()); 
     Log.d(LOG_TAG, "HTML CODE: " + htmlCode); 
    } 

답변

1

당신은의 Runnable 또는 스레드, 그러나 아마이 작업을 수행하는 가장 관용적 안드로이드 방법 AsyncTask를 사용하는 것입니다을 사용할 수 있습니다.

new AsyncTask<String, Void, String>(){ 
    @Override 
    protected String doInBackground(String... urlStr){ 
    // do stuff on non-UI thread 
    StringBuffer htmlCode = new StringBuffer(); 
    try{ 
     URL url = new URL(urlStr[0]); 
     BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 

     String inputLine; 

     while ((inputLine = in.readLine()) != null) { 
     htmlCode += inputLine; 
     Log.d(LOG_TAG, "html: " + inputLine); 
     } 

     in.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.d(LOG_TAG, "Error: " + e.getMessage()); 
     Log.d(LOG_TAG, "HTML CODE: " + htmlCode); 
    } 
    return htmlCode.toString(); 
    }   

    @Override 
    protected void onPostExecute(String htmlCode){ 
    // do stuff on UI thread with the html 
    TextView out = (TextView) findViewById(R.id.out); 
    out.setText(htmlCode); 
    } 
}.execute("http://www.google.com"); 
관련 문제