web-dev-qa-db-de.com

Android-Codierung mit Schalter (String)

Ich entwickle eine Android-App für Eclipse, wenn ich Code ausprobiere 

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

es gibt mir den folgenden fehler

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

also habe ich den compiler auf 1.7 geändert, dann gibt es noch einen fehler 

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

Gibt es überhaupt einen Schalter (String), der in Android-Anwendungen funktioniert? 

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

Die switch-Anweisung für String-Objekte ist eine neue Funktion, die in Java 1.7 eingeführt wurde. Leider erfordert Android die Version 1.6 oder 1.5. Deshalb müssen Sie solche Konstruktionen für einige Zeit vergessen.

Sie können die Verwendung von if-statement-chain vermeiden, indem Sie die Methodenkarte speichern, die für bestimmte String: Map<String, Method> ausgeführt wird. Sie können Method immer mit einem Handler-Objekt kapseln. Hier finden Sie weitere Informationen: Wie entferne ich die große if-else-if-Kette

und

warum-kippe-ich-einschalten-a-string

36
Adam Sznajder

Mit dem Release von API 19 KitKat können Sie dies jetzt tun !!!! Dies ist die Änderung, die Sie für Android Studio für vorhandene Projekte benötigen. Stellen Sie sicher, dass Sie JDK 1.7 oder höher und Gradle Plugin 0.6.1 oder höher verwenden

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

Du hast keine Wahl. Sie können Switch nicht mit Strings arbeiten (zumindest jetzt). Die folgende Nachricht stimmt ausdrücklich damit überein.

Android erfordert Compiler-Kompatibilitätsgrad 5.0 oder 6.0. Stattdessen '1.7' gefunden

6
kosa

Sie können dies mit den neuesten Android-Build-Tools tun. Android unterstützt Java 7 seit der API 19.

Das Beste ist, dass es auch dann funktioniert, wenn Sie Ihre minSdkVersion auf unter 19 setzen. Zitieren dieser Android-Entwicklerseite :

Beachten Sie, dass Sie minSdkVersion mit einem früheren Wert als 19 für alle Sprachfunktionen verwenden können, mit Ausnahme von try with resources. Wenn Sie try mit Ressourcen verwenden möchten, müssen Sie auch eine minSdkVersion von 19 verwenden.

5

Hier ist eine andere Alternative für Android mit Java 5 oder 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

Da ich davon ausgehe, dass die meisten Leute Android Studio mit mindestens einem Minimum von Java 7 verwenden, lautet die Antwort jetzt: Ja, Sie können Strings in Android wechseln, selbst für minSdkVersion-Versionen <19. Hier ein Beispiel wie aus der Java SE-Dokumentation entnommen :

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

Die Dokumente beachten auch:

  • Die Verwendung von Stringwechsel ist im Allgemeinen schneller als verkettete if-else.
  • Es ist so, als würden in jedem Fall String.equals verwendet.
0
Suragch