web-dev-qa-db-fra.com

Codage Android avec interrupteur (chaîne)

Je développe une application Android sur Eclipse, lorsque j'essaie du code comme 

switch(String){
 ......
}

ça me donne l'erreur suivante

Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted

donc j'ai changé le compilateur à 1.7, alors il me donne une autre erreur 

Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.

Alors, y a-t-il un moyen de laisser switch (String) fonctionner dans les applications Android? 

if(){}
else if(){}
else if(){}
........
34
jing1988ccc

L'instruction switch sur les objets String est une nouvelle fonctionnalité introduite dans Java 1.7. Malheureusement, Android nécessite la version 1.6 ou 1.5. C'est pourquoi vous devez oublier pendant un certain temps de telles constructions.

Vous pouvez éviter d'utiliser if-statement-chain en stockant la mappe des méthodes qui seront exécutées pour certaines String: Map<String, Method>. Vous pouvez toujours encapsuler Method avec un objet Handler. Regardez ici pour plus d’informations: Comment supprimer une grande chaîne if-else-if

et

pourquoi-chanter-je-passer-sur-une-chaîne

36
Adam Sznajder

Avec la sortie de l'API 19 KitKat, vous pouvez maintenant le faire !!!! C'est le changement dont vous avez besoin pour Android studio pour les projets existants. assurez-vous que vous utilisez JDK 1.7 ou version ultérieure et Gradle plugin 0.6.1 ou version ultérieure

Android {
compileSdkVersion 19
buildToolsVersion "19.0.0"

defaultConfig {
    minSdkVersion 7
    targetSdkVersion 19
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
} }
92
Ryan Heitner

Tu n'as pas le choix. Vous ne pouvez pas travailler Switch avec des chaînes (du moins pour le moment). Le message suivant est explicitement conforme à cela.

Android requiert le niveau de conformité du compilateur 5.0 ou 6.0. Trouvé '1.7' à la place

6
kosa

Vous pouvez le faire avec les derniers outils de construction Android. Android a commencé à supporter Java 7 depuis l’API 19.

La meilleure partie est que cela fonctionnera même si vous définissez votre minSdkVersion sur une valeur inférieure à 19. Citation de cette page de développeur Android :

Notez que vous pouvez utiliser minSdkVersion avec une valeur antérieure à 19, pour toutes les fonctionnalités de langage, à l'exception de l'essai avec des ressources. Si vous souhaitez utiliser try avec des ressources, vous devez également utiliser une minSdkVersion de 19.

5
Shubham Chaudhary

Voici une autre alternative pour Android avec Java 5 ou 6 

public enum Command  {text, image, other};

String enumTest = "text";
try{
    Command command  = Command.valueOf(enumTest);
}
catch(Exception e){
    Log.e("Tag", "Command not found: " + enumTest);
}
switch (command){
   case image:
      break;
   case  text:
       break;
}
3
Juan Giorello

Puisque je suppose que la plupart des gens utilisent Android Studio avec au moins Java 7 au minimum, la réponse est maintenant Oui, vous pouvez changer de chaîne dans Android, même pour les versions minSdkVersion <19. Voici un exemple pour le faire, tiré de Java SE Documentation :

public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
     String typeOfDay;
     switch (dayOfWeekArg) {
         case "Monday":
             typeOfDay = "Start of work week";
             break;
         case "Tuesday":
         case "Wednesday":
         case "Thursday":
             typeOfDay = "Midweek";
             break;
         case "Friday":
             typeOfDay = "End of work week";
             break;
         case "Saturday":
         case "Sunday":
             typeOfDay = "Weekend";
             break;
         default:
             throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
     }
     return typeOfDay;
}

Les docs notent également:

  • L'utilisation de la commutation de chaîne est généralement plus rapide que la chaîne if-else.
  • C'est comme si chaque cas utilisait String.equals.
0
Suragch