2013-06-03 172 views
1

我知道這種類型的問題已經出現過,並且我已經拋棄了它們,但沒有得到我需要做的最後部分。無法處理自定義異常Java

我ExceptionClass

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

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

我ActivityClass(自定義適配器Android中的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)捕獲。但它不允許。 在Java的Eclipse編輯器 Unreachable catch block for ProException. This exception is never thrown from the try statement body

+2

您需要拋出一個'ProException'才能捕獲它... –

+0

throw但是如何捕獲這裏發生的任何異常。 – MDMalik

+0

@MDMalik我認爲你需要擴展一些由Android提供的異常類,而不是一個異常(主要的Java類)。 – Ketan

回答

1

任何幫助

留言所有這些觀點不知道你的自定義異常類。您必須擴展/編寫自己的View類,以引發您的自定義異常,或在try塊內手動拋出異常。

throw new ProException();

+0

你的意思是。 'catch(Exception ex){throw new ProException();}' 這是你的意思嗎,抓住一個普通的異常並拋出它? – MDMalik

+0

即使您需要用try/catch代碼塊來包圍它,也可以工作。您基本上會重新拋出任何異常作爲您的自定義異常。我個人認爲這太亂了。我不知道什麼好處,所以不知道還有什麼建議。 –

0

MD請告訴的方法getView它調用可以拋出ProException。看起來這個方法中沒有任何代碼可以拋出ProException,所以你得到了「這個異常永遠不會從try語句體中拋出」,並且block不可訪問。爲了在try catch中使用,它應該得到Proexception,或者你可以在getview的try catch中捕獲Exception,然後將它包裝在ProException中。

請看看這是否解決了這個問題。

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的構造函數參數(然後您可以將它傳遞給super(cause,message))。

+0

讓我試試看。 – MDMalik