Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Erreur avec un switch

Sujet résolu
Anonyme
    19 mai 2012 à 19:50:09

    Salut salut, je commence tout juste en Java, et je butte contre une erreur que je n'arrive pas à résoudre !
    public class MainActivity extends Activity implements OnClickListener {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            //Définition des boutons
            Button bouton1 = (Button)findViewById(R.id.bouton1);
            Button bouton2 = (Button)findViewById(R.id.bouton2);
            //Mise en écoute des boutons
            bouton1.setOnClickListener(this);
            bouton2.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case bouton1.getId():
                    //code code code...
                case bouton2.getID():
                    //code code code
            }
        }
    

    Et l'erreur :
    bouton1 cannot be resolved
    bouton2 cannot be resolved


    Je ne comprends pas trop...
    Quelqu'un peut aider un pauvre débutant comme moi ?
    • Partager sur Facebook
    • Partager sur Twitter
      19 mai 2012 à 19:54:44

      bouton1 et bouton2 sont des variables locales à la méthode onCreate(), donc logiquement inaccessibles depuis l'extérieur.
      Une variable n'est accessible que dans le bloc { } dans lequel elle a été créée.
      • Partager sur Facebook
      • Partager sur Twitter
      ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
      Anonyme
        19 mai 2012 à 20:14:03

        Alors j'ai sorti les boutons des {} et maintenant j'ai un :
        case expressions must be constant expressions
        • Partager sur Facebook
        • Partager sur Twitter
          19 mai 2012 à 20:16:44

          dans les switch faut des nombres je crois avec les string ça marche pas
          fais avec des if sinon
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            19 mai 2012 à 20:19:03

            la fonction getID() retourne bien un int.
            • Partager sur Facebook
            • Partager sur Twitter
              19 mai 2012 à 20:26:09

              Remontres ton code stp là je vois pas ce qui peut provoquer cette erreur.
              • Partager sur Facebook
              • Partager sur Twitter
              ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
              Anonyme
                19 mai 2012 à 20:27:59

                Voilà voilà :
                public class MainActivity extends Activity implements OnClickListener {
                	
                	//Définition des boutons
                    Button bouton1 = (Button)findViewById(R.id.bouton1);
                    
                    @Override
                    public void onCreate(Bundle savedInstanceState) {
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.main);
                        
                        //Mise en écoute des boutons
                        bouton1.setOnClickListener(this);
                    }
                
                	@Override
                	public void onClick(View v) {
                		switch (v.getId()) {
                			case bouton1.getId():
                				//code code code...
                		}
                	}
                }
                

                Erreur : case expressions must be constant expressions

                EDIT: Si ça peux aider, c'est du Android hein ^^"
                • Partager sur Facebook
                • Partager sur Twitter
                  19 mai 2012 à 20:43:46

                  Ok je comprends mieux.

                  En fait il faut que tu déclares ta variable en dehors de ta méthode ce que tu as fait, mais par contre il faut que tu l'initialises dans le bloc { }, c'est là qu'on place le code.

                  En clair :

                  public class Blabla {
                  
                       //Des variables
                  
                       public Blabla() {
                            //Du code et éventuellement des variables...
                       }
                  
                       public uneMethodePublique() {
                            //Du code et éventuellement des variables...
                       }
                  }
                  


                  Là je peux pas t'aider plus ça fait clairement partit des bases du Java, Android ou pas.

                  EDIT: Si tu comprends toujours pas tu peux lire le tuto du site.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
                  Anonyme
                    19 mai 2012 à 20:46:02

                    Bah si, la variable bouton1 est initialisée ligne 4 (du code que j'ai posté).
                    Je rappelle l'erreur : case expressions must be constant expressions


                    EDIT:
                    Bon... Si tu veux je raccourcis le code :
                    public class MaClasse {
                        //Définition des boutons
                        Button bouton1 = (Button)findViewById(R.id.bouton1);
                        
                        public void onCreate(Bundle savedInstanceState) {
                            //Mise en écoute des boutons
                            bouton1.setOnClickListener(this);
                        }
                    
                        public void onClick(View v) {
                            switch (v.getId()) {
                                case bouton1.getId():
                                    //code code code...
                            }
                        }
                    }
                    

                    Et mon erreur : case expressions must be constant expressions
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 mai 2012 à 20:54:16

                      Essayes ce code :

                      public class MaClasse {
                          //Définition des boutons
                          Button bouton1;
                          
                          public void onCreate(Bundle savedInstanceState) {
                              setContentView(R.layout.main);
                              bouton1 = (Button)findViewById(R.id.bouton1);
                              //Mise en écoute des boutons
                              bouton1.setOnClickListener(this);
                          }
                      
                          public void onClick(View v) {
                              switch (v.getId()) {
                                  case bouton1.getId():
                                      //code code code...
                              }
                          }
                      }
                      


                      EDIT: Sinon regardes .
                      • Partager sur Facebook
                      • Partager sur Twitter
                      ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
                      Anonyme
                        19 mai 2012 à 21:01:05

                        Ok, je regarderai. :)

                        EDIT: Ah... Donc c'est vraiment pas faisable...
                        Je vais me rapatrier sur des if :/
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          20 mai 2012 à 7:29:53

                          Juste une petite précision. En Java, le switch fonctionne avec les String depuis Java SE 7.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 mai 2012 à 14:12:38

                            Bonjour,

                            Je déplace ton topic dans le forum dédié au "Mobile".

                            Pour ton problème, essaye ceci :

                            @Override
                            public void onClick(View v) {
                                switch (v.getId()) {
                                    case R.id.button1:
                                        //code du bouton 1
                                    case R.id.button2:
                                        //code du bouton 2
                                }
                            }
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                              20 mai 2012 à 14:46:23

                              Bonjour,

                              Citation : brubru777

                              Juste une petite précision. En Java, le switch fonctionne avec les String depuis Java SE 7.


                              Sauf que Android c'est du Java 6 (et a priori également compatible avec Java 5 mais je ne mettrais pas ma main à couper). Donc les nouveautés de Java 7 ne fonctionneront pas. Tu peux essayer de créer un projet Android dans Eclipse avec un JDK 7 mais il sera automatiquement réglé en Java 6 compliance.

                              Et +1 pour le code d'AndroWiiid.

                              @Sirgue: il faut de mettre les findViewById() dans la méthode onCreate() plutôt qu'à la déclaration de la variable car au moins tu es sûr que le setContentView() a été appelé ce qui évite pas mal de NullPointerException. A condition de bien avoir appelé setContentView() au préalable...
                              • Partager sur Facebook
                              • Partager sur Twitter

                              [Android] Erreur avec un switch

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown