2017-08-29 2 views
1

J'ai une méthode qui définit un onClickListener sur certains Button, cette méthode jette des exceptions.Gérer les exceptions profondes, de l'intérieur onClickListener

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

et la méthode buttonClicked() jette aussi une exception!

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

Ce que je veux faire est d'attraper le Exception est venu de buttonClicked() et de le jeter foo().

Je devrais pouvoir attraper Exception est venu de buttonClicked() dans:

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

Toute idée sur la façon de le faire - SANS UTILISER Interfaces.

+0

ButtonClicked void() {// utilisent try capture // code qui peut provoquer une exception } –

+0

@BapusahebShinde s'il vous plaît relire à nouveau la question et/ou vérifier ce 'throws' signifie. –

+0

Voulez-vous lancer Exception de buttonClicked() et l'attraper de foo() ou quoi? Pourquoi essayez-vous de le lancer à la fois depuis foo() et depuis buttonClicked()? – Hetfieldan24

Répondre

0

C'est ce que vous voulez?

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()); 
       } 
      } 
     } 
    }); 
} 

Alors lorsque vous appelez foo():

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

Donc, si setOnClickListener() dans foo() a été setted avec succès, mais la Exception a été pris dans foo(), vous recevrez le message de foo() une fois et un message de buttonClicked() après chaque clic.

+0

J'ai déjà essayé votre logique et c'est faux! la seule ligne qui sera appelée est Log.e ("CATCHED", newException.getMessage()); ', c'est-à-dire que le catch externe ne sera jamais appelé! –

+0

Etes-vous sûr que onClickListener() a été correctement configuré? Pouvez-vous poster entièrement du code, comment vous avez provoqué les deux exceptions? – Hetfieldan24

+0

Idk ce que vous entendez par mis en place avec succès !, plz essayez votre code dans une application de démonstration le voir le résultat! –