2017-08-29 48 views
1

我有一種方法在某些Button, 上定義了onClickListener,該方法拋出異常。處理來自onClickListener內部的深度異常

void foo() throws Exception{ 
       button.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         buttonClicked(); 
        } 
       }); 
      } 

和方法buttonClicked()也會拋出異常!

void buttonClicked() throws Exception{ 
     //some code that can cause exception 
    } 

我想要做的就是趕ExceptionbuttonClicked()來了,從foo()扔掉它。

所以我應該能夠趕上ExceptionbuttonClicked()中傳來:

try 
{ 
    foo(); 
} 
catch (Exception e) 
{ 
    // HERE 
} 

如何做到這一點任何想法 - 不使用的接口。

+0

無效buttonClicked(){//使用嘗試捕捉 //一些代碼,可導致異常 }再次 –

+0

@BapusahebShinde請重新閱讀問題和/或檢查什麼'throws'意思。 –

+0

你想從buttonClicked()拋出異常,並從foo()捕獲它或什麼?爲什麼你試圖從foo()和buttonClicked()中都拋出它? – Hetfieldan24

回答

0

這就是你想要的?

void foo() throws Exception 
{ 
    button.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View view) 
     { 
      try 
      { 
       buttonClicked(); 
      } 
      catch (Exception e) 
      { 
       try 
       { 
        throw new Exception("message from buttonClicked(): " + e.getMessage()); 
       } 
       catch (Exception newException) 
       { 
        Log.e("CATCHED", newException.getMessage()); 
       } 
      } 
     } 
    }); 
} 

所以那麼當你調用foo()

try 
{ 
    foo(); 
} 
catch (Exception e) 
{ 
    Log.e("CATCHED", "message from foo(): " + e.getMessage()); 
} 

所以,如果setOnClickListener()foo()成功設置好的,但隨後Exception被夾在foo(),你會從foo()一次信息接收從消息每次點擊後都會顯示buttonClicked()

+0

我已經試過你的邏輯了,它是錯誤的!唯一將被調用的行是'Log.e(「CATCHED」,newException.getMessage());',即外部catch永遠不會被調用! –

+0

你確定onClickListener()設置成功嗎?你能完全發佈代碼嗎,你是如何造成這兩種異常的? – Hetfieldan24

+0

Idk你的意思是設置成功!,試試你的代碼在演示程序中查看結果! –