2013-06-03 2 views
1

이 유형의 질문이 이전에 왔음을 알고 있으며, 나는 던져 버렸습니다.하지만 내가해야 할 마지막 부분을 얻지 못했습니다.사용자 정의 예외 Java를 처리 할 수 ​​없습니다.

내 ExceptionClass

public class ProException extends Exception { 
/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

public ProException(String message) { 
    super(message); 
    } 
} 

내 ActivityClass (ListView에 대한 안드로이드 사용자 정의 어댑터)

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi = convertView; 
    try { 
     if (convertView == null) { 
      vi = inflater.inflate(R.layout.pause_client_trigger_request_select_sku_list_row, null); 
      tvItemName = (TextView) vi.findViewById(R.id.list_row_ItemName);     
     } else { 
      tvItemName = (TextView) vi.findViewById(R.id.list_row_ItemName); 
     } 

     hmap = new HashMap<String, String>(); 
     hmap = data.get(position); 
     tvItemName.setText(hmap.get(KEY_ItemName)); 

    } catch (ProException ex) { 
     Log.i(Tag, ex.getMessage()); 
    } 

    return vi; 
} 

지금 내가 원하는 것입니다.

이 경우에 발생하는 예외가있는 경우 try catch 예외. 내 custom class (ProException)에 캡처해야합니다. 그러나 그것은 허락하지 않는다. 자바 이클립스 에디터 Unreachable catch block for ProException. This exception is never thrown from the try statement body

+2

당신은 그것을 잡으려고'ProException'을 던져야합니다 ... –

+0

던지다하지만 어떻게해야합니까? 여기에서 일어나는 예외를 잡아야합니다. – MDMalik

+0

@MDMalik 안드로이드가 제공하는 Exception 클래스 (Exception (main 자바 클래스)가 아닌)를 확장해야한다고 생각합니다. – Ketan

답변

1

에 어떤 도움을

메시지는 그 모든 뷰는 사용자 정의 예외 클래스에 대해 알고하지 않습니다. 사용자 정의 예외를 던지는 자신의 View 클래스를 확장/작성하거나 try 블록 내에 수동으로 예외를 throw해야합니다.

throw new ProException();

+0

을 의미합니다. 'catch (Exception ex) {throw new ProException();} 이게 무슨 뜻인가, 일반적인 예외를 잡아서 던져? – MDMalik

+0

그럴 경우 try/catch 블록으로 둘러 쌀 필요가 있지만 작동합니다. 기본적으로 사용자 정의 예외로 모든 예외를 다시 발생시킵니다. 개인적으로 나는 이것이 너무 혼란 스러울 것이라고 생각한다. 그게 무슨 이득이 될지 모르겠다. –

0

MD는 ProException을 던질 수있는 방법의 getView에서 부른다 알려주십시오. 이 메소드의 코드는 ProException을 throw 할 수 없으므로 "이 예외는 try 문에서 벗어나지 않습니다"라는 메시지가 나타나고 도달 할 수 없습니다. try catch에 사용하려면 Proexception을 얻어야하며 그렇지 않으면 ProException에서 getView를 catch 한 다음 Exception을 catch 할 수 있습니다.

이 방법으로 문제가 해결되는지 확인하십시오.

0

ProException은 예외입니다. 그런 다음 사용자 정의 예외를 작성할 때 코드 블록은 예외를 던져 코드 블록 던져 예외가 그때는 잡을 수 계층 구조

Exception->>ProException 

될 두지 때문에 때, 그것은 Exception의 catch 블록을 찾으려고 대신 ProException합니다 . 또는 간단한 용어에 It will try to find out type of exception

그래서 당신은 당신이 어딘가에 던져 때마다 Exception 대신

ProException의 사용자 정의 예외 도움이 잡을 수 있습니다.

0

나는 당신이 원하는 것은

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi = convertView; 
    try { 
     if (convertView == null) { 
      vi = inflater.inflate(R.layout.pause_client_trigger_request_select_sku_list_row, null); 
      tvItemName = (TextView) vi.findViewById(R.id.list_row_ItemName);     
     } else { 
      tvItemName = (TextView) vi.findViewById(R.id.list_row_ItemName); 
     } 

     hmap = new HashMap<String, String>(); 
     hmap = data.get(position); 
     tvItemName.setText(hmap.get(KEY_ItemName)); 

    } catch (Exception ex) { 
     Log.i(Tag, ex.getMessage()); 
     throw new ProException(ex.getMessage()); 
    } 

    return vi; 
} 

그런 다음 호출 코드가 ProException를 잡을 수라고 생각합니다. ProException에 대한 생성자 인수로 cause 예외를 가져 오는 것을 고려해야합니다 (super (cause, message)로 전달할 수 있습니다).

+0

해보겠습니다. – MDMalik

관련 문제