2012-07-24 3 views
1

URL의 내용을 읽으려고합니다. BufferedReader의 초기화로 인해 충돌이 계속 발생합니다.오류를 일으키는 URL을 읽는 BufferedReader 만들기 : 작업을 시작할 수 없습니다.

나는 사람들의 해결책을 찾아 보았지만, 내가 무엇을해도이 오류가 발생합니다.

여기 내 코드입니다 : 사전에

07-24 13:56:17.546: I/System.out(1554): About to create URL. 
07-24 13:56:17.557: I/System.out(1554): Created URL 
07-24 13:56:17.557: I/System.out(1554): About to create URLConnection 
07-24 13:56:17.557: I/System.out(1554): Created URLConnection 
07-24 13:56:17.557: I/System.out(1554): About to create the BufferedReader 
07-24 13:56:17.576: D/AndroidRuntime(1554): Shutting down VM 
07-24 13:56:17.576: W/dalvikvm(1554): threadid=1: thread exiting with uncaught exception 
             (group=0x40a13300) 
07-24 13:56:17.606: E/AndroidRuntime(1554): FATAL EXCEPTION: main 
07-24 13:56:17.606: E/AndroidRuntime(1554): java.lang.RuntimeException: Unable to start 
            activity ComponentInfo{com. ... 

감사 : 여기

try { 
     String sUrl = "http://www.google.com"; 
     System.out.println("About to create URL."); 
     URL url = new URL(sUrl); 
     System.out.println("Created URL"); 

     System.out.println("About to create URLConnection"); 
     URLConnection urlc = url.openConnection(); 
     System.out.println("Created URLConnection"); 

     System.out.println("About to create the BufferedReader"); 
     BufferedReader bR = new BufferedReader(new 
      InputStreamReader(urlc.getInputStream())); 
     System.out.println("Created the BufferedReader"); 

     System.out.println("About to create a StringBuilder"); 
     StringBuilder sBuilder = new StringBuilder(); 
     System.out.println("Created StringBuilder"); 

     int byteRead; 
     System.out.println("About to enter while loop and build string"); 
     while ((byteRead = bR.read()) != -1) 
     { 
      sBuilder.append((char) byteRead); 
     } 
     System.out.println("Built string"); 

     bR.close(); 
     System.out.println("Buffered reader is closed"); 
     String text = sBuilder.toString(); 
     System.out.println(text); 
} 
catch (IOException e) 
{ 
// 
} 

그리고는 (의 일부) 내가 얻을 로그입니다.

답변

5

Android 3.0부터 기본 UI 스레드에서 URL 연결을 열 수 없습니다. 반드시 AsyncTask/Background 스레드에서이 작업을 수행해야합니다. 안드로이드의 벌집 버전에서 법이되었다 비 UI 스레드,에 UI 스레드와 비 UI 작업에 UI 작업을 계속

+1

Android 3.0부터는 UI 스레드에서 HTTP 및 POST와 같은 네트워크 연결을 설정할 수 없습니다. 당신은 백그라운드에서 그렇게해야 할 것입니다. –

+0

이것은 의미가 있습니다. 이 물건을 더 조사해야합니다. – NS114

+0

정말 고마워요! 내가 2.1에서 테스트하는 데 사용하고 있었고 .. 그때 내가 4.0에서 애플 리케이션을 열었을 때 작동하지 않았다. 귀하의 답변은 정말 나를 도왔습니다 :) –

0

1 그것의 항상 좋습니다. 당신이BufferedReader을 언급 한대로

는 또한 내가 그것을 사용 ,

public final String sUrl = "http://www.google.com"; 

new Thread(new Runnable(){ 

public void run(){ 

URL url = new URL(sUrl); 

InputStream i = url.openStream(); 

InputStreamReader isr = new InputStreamReader(i); 

BufferedReader br = new BufferedReader(isr); 

StringBuilder sb = new StringBuilder(); 

String s = null; 

while ((br.readLine())!=null){ 

    sb.append(br.readLine()); 

    } 

    s = sb.toString(); 

System.out.println(s); 

    } 
    }).start(); 

2이 코드는 단지 InputStream and Scanner, 와 작은 수 있었다 .... 아래의 코드를 시도하지만, ...

AsyncTask 특별히 디자인 할 수 있습니다. 안드로이드 용 에디션은 고통없는 스레드로, UI 및 비 UI 스레드를 쉽게 동기화합니다.

+0

AsyncTask를 사용하면 아마도 표준이 될 것입니다. – JoxTraex

+0

예. 그렇습니다. 통증이없는 스레딩으로 알고 있습니다.하지만 여기에서는 probs가 출력을 얻을 수 없었습니다 ... 허니 콤이 허용 할 때까지 ... UI가 응답하지 않았더라도. .. 출력물을 얻어야합니다.하지만 만약 당신이 그렇게 생각한다면 diff를 추가 할 것입니다 .. –