2016-08-05 3 views
-3

pourquoi flux continuer après exception attraper? quand je clique sur le bouton, le toast me montre le message mais après le flux continue ....flux continuer après exception attraper

Je te montre mon code!

 public static int showResult2(View v) { 
      int totalAmount = 0; 


      for (Birra b : biAdapter.getBox()) { 
       if (b.selected) { 
        try { 
         int quantitaInt = Integer.parseInt(b.getQuantità()); 
         totalAmount += b.distance * quantitaInt; 

        }catch(NumberFormatException exc){ 
         System.out.println(exc); 
         Toast.makeText(context, "inserisci una quantita' a \""+b.name, Toast.LENGTH_LONG).show(); 
break; 

        } 
       } 
      } 
      return totalAmount; 
     } 

DANS UN AUTRE CLASSE I RECALL LA MÉTHODE:

ThreeFragment tf = new ThreeFragment(); 

        string4 = tf.showResult(v); 
        try { 
        totalebibite = tf.showResult2(v); 
       } catch (NumberFormatException exc) { 
        exc.printStackTrace(); 
       } 
+2

Parce que vous ne cassez pas la boucle. Ajoutez 'break 'dans la prise; ou mettez le 'try/catch' autour de la boucle. –

+0

J'ai utilisé pause; dans la prise après le toast, mais ne fonctionne pas – user6612196

+1

Je suis un peu confus pourquoi une quantité de bière serait une chaîne en premier lieu (sauf si vous stockez comme «assez pour une bonne soirée», bien sûr). Pourquoi ne pas simplement changer le type de 'Birra.getQuantità()' en 'int'? –

Répondre

0

Vous ai pris l'exception, si Java suppose que vous allez traiter adéquatement. Si vous ne voulez pas ce comportement, sauf catch, vous pouvez toujours renvoyer l'exception (throw exc;) après l'impression de votre message, ce qui signifie que quelque chose de plus haut dans la pile des appels doit être renvoyé(). traiter avec, ou utiliser une instruction break; pour terminer la boucle au début.

+0

J'ai utilisé break; dans la prise après le pain grillé, mais ne fonctionne pas – user6612196

+2

Oh oui ça va! Nous aurons besoin de voir le code * exact *, sinon nous ne savons pas où est le problème. – Bathsheba

0

Si vous voulez casser votre boucle dans l'utilisation d'exception comme ci-dessous.

Vous devriez ajouter votre pause; en prise

rupture; est ce dont vous avez besoin pour sortir de toute déclaration en boucle comme pour, while ou do-while.

Toujours est-il que cela signifie que vous n'appelez pas cette méthode encore et encore.

Vérifiez également dans votre classe Java que vous avez une autre méthode utilise la même chose pour la condition de boucle.

Vous ne devez pas appeler vos classes de fragment. C'est une mauvaise façon d'appeler une méthode.

ThreeFragment tf = new ThreeFragment(); 
         string4 = tf.showResult(v);    
         totalebibite = tf.showResult2(v); 

Il est une méthode statique appeler votre méthode de cette manière

ThreeFragment.showResult2(v); 

Cocher cette showResult (v); a le même pour la boucle

+0

si vous voyez ma question, j'ai ajouté pause; mais ne fonctionne pas ... – user6612196

+0

alors vous devriez vérifier votre fichier de classe complètement. Parce que l'instruction break fonctionnera aussi dans le bloc catch. Assurez-vous combien de fois vous appelez cette méthode. Si vous n'appelez pas cette méthode fréquemment, vous ne rencontrez pas ce problème à cause de cette méthode. @ User6612196 – MathaN

+0

J'appelle cette méthode dans une autre classe sur le bouton de clic – user6612196

0

Le code ci-dessous est similaire à ce que vous avez présenté. Comme indiqué par d'autres, cassez; termine la boucle la plus proche.

for(int i=0; i<10; i++) { 
     if(true) {  
      try{ 
       //Your logic here, which could throw exception 
       System.out.println("throwing"); 
       if(true) { 
        throw new Exception("This is it"); 
       } 
      }catch(Exception e){ 
       System.out.println("catching"); 
       break; 
      } 

      System.out.println("inside if"); 
     } 
     System.out.println("inside for"); 
    } 
    System.out.println("outside for"); 

L'utilisation de break est une mauvaise pratique de programmation. Vous pouvez changer le flux de code pour quelque chose comme ça.

try{ 
     System.out.println("inside try"); 
     for(int i=0; i<10; i++) { 
      if(true) { 
       if(true) { 
        throw new Exception("This is it"); 
       } 
       System.out.println("inside if"); 
      } 
      System.out.println("inside for"); 
     } 
    } 
    catch(Exception e){ 
     System.out.println("catching"); 
    } 
    System.out.println("after catch"); 

Veuillez marquer votre question comme si vous y répondez.

0

Mettez votre bloc try/catch autour de la boucle au lieu de l'intérieur, de sorte que les sorties en boucle sur une exception:

try { 
    for (Birra b : biAdapter.getBox()) { 
     if (b.selected) { 
      int quantitaInt = Integer.parseInt(b.getQuantità()); 
      totalAmount += b.distance * quantitaInt; 
     } 
    } 
} catch (NumberFormatException exc) { 
    System.out.println(exc); 
    Toast.makeText(context, "inserisci una quantita' a \""+b.name, Toast.LENGTH_LONG).show(); 
} 

Sinon, à l'intérieur du bloc catch vous pouvez a) réémettre l'exception, b) sortir de la boucle, ou c) retour de la méthode.