2012-11-28 2 views
3

Android 개발자는 전적으로 멍청합니다. 나는 여전히 배우고 있으며, 나는 앱 개발의 첫 단계에있다.Android : 처리되지 않은 예외 유형 IOException 오류

나는이 코드가 작동하며 잘 실행되거나 정상적인 Java를 실행하므로 이제 Android OS에 구현하려고합니다.

내 코드에서 TEST.openStream()이라고 말하면 Unhandled exception type IOException 오류가 발생합니다. IOException를 throw로

package com.zv.android; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 

import android.app.Activity; 
import android.os.Bundle; 

public class ZipActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

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

      String inputLine; 
      int line=0; 
      while ((inputLine = in.readLine()) != null){ 
       line++; 
         //System.out.println(line + "\t" + inputLine); 
      } 
      // in.close(); 
     } catch(MalformedURLException e) { 
      //Do something with the exception. 
     } 

    } 
} 

답변

9

오류 메시지는 간단하다 : 당신은 또한 당신이 예외를 처리해야한다는 사실을 받아 그래서 방법의 계약에 동의함으로써

public final InputStream openStream() throws IOException 

으로이 URL.openStream() 때문에 선언의 IOException를 잡을 필요가,이 Java에서 작동하는 방식입니다. 이것은 예외가 확인 된 경우 발생할 수있는 상황을 나타내며 코드에서 처리해야하는 상황을 나타 내기 때문에이 예외가 발견되어야합니다.

try { 
    .. 
catch (MalformedURLException e) { 
    .. 
} 
catch (IOException e) { 
    .. 
} 

을 그냥 최종 참고로 :

는 그냥 try 성명에서 또 다른 사건을 추가 잡으려고 당신이 openStream() 메서드를 호출 할 때 그것을 잡을 필요가 없습니다, 당신은 방법 것을 주장 할 수 openStream()을 호출하면 호출자에게 예외가 전달되지만 호출 체인의 끝에는 어떤 경우 에든 예외를 catch해야합니다.

3

캐치 IOException 또한, 당신은 MalformedURLException (또는)에서했던 방법과 같은 방법을 선언합니다.

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

      String inputLine; 
      int line=0; 
      while ((inputLine = in.readLine()) != null){ 
       line++; 
         //System.out.println(line + "\t" + inputLine); 
      } 
      // in.close(); 
     } catch(MalformedURLException e) { 
      //Do something with the exception. 
     } catch(IOException e2) { 
      //Do something with the exception. 
     } 

IOException는 캐치 (또는) 다시 던져해야 하나 예외를 확인합니다. 자세한 내용은 tutorial을 참조하십시오.

openStream() 메서드가 비정상적인 경우 IOException을 throw 할 수 있으므로 IOException을 catch해야합니다.

+0

왜 IOException도 잡을 수 있는지 설명해 주시겠습니까? – Mowgli

+0

@Mowgli : 업데이트를 참조하십시오. – kosa

1
TEST.openStream() 

자바에서 예외을 체크는 IOException을 던질 수 따라서 당신은 블록 또는 가 발생합니다 사용하여 메소드 서명에 IOException가 선언 중 하나 핸들 시도/캐치를 사용 IOException가에있다 절.

catch 블록에서 IOException을 처리해야합니다. 내가 강하게 항상 추천 시도/캐치를 사용하여 예외를 처리하는 대신 것이지만, 당신이 시도/캐치 내부 코드를 포장 해달라고이 경우

public void onCreate(Bundle savedInstanceState) throws IOException { 

: 당신의 메소드 서명에 IOException가 선언

try { 
      URL TEST = new URL("http://www.google.com/"); 
      BufferedReader in = new BufferedReader(new InputStreamReader(TEST.openStream())); 
      //rest of your code 
      } catch(MalformedURLException e) { 
      //Do something with the exception. 
     } 

     catch(MalformedURLException e) { 
     //Do something with the exception. 
     } 
     catch(IOException ex) { 
      ex.printStackTrace(); 
     } 

throws 절을 사용하여 선언합니다.

관련 문제