Meine Switch-Case-Anweisung funktioniert gestern einwandfrei. Aber als ich den Code heute Morgen früher ausführte, gab mir Eclipse einen Fehler, der die case-Anweisungen in der Farbe Rot unterstrich und sagte: case-Ausdrücke müssen konstante Ausdrücke sein, es ist konstant, ich weiß nicht, was passiert ist. Hier ist mein Code unten:
public void onClick(View src)
{
switch(src.getId()) {
case R.id.playbtn:
checkwificonnection();
break;
case R.id.stopbtn:
Log.d(TAG, "onClick: stopping srvice");
Playbutton.setImageResource(R.drawable.playbtn1);
Playbutton.setVisibility(0); //visible
Stopbutton.setVisibility(4); //invisible
stopService(new Intent(RakistaRadio.this,myservice.class));
clearstatusbar();
timer.cancel();
Title.setText(" ");
Artist.setText(" ");
break;
case R.id.btnmenu:
openOptionsMenu();
break;
}
}
Alle R.id.int sind rot unterstrichen.
java
android
switch-statement
HeartlessArchangel
quelle
quelle
R.id.playbtn
usw. angeben? Ist alles statisch und endgültig?R
wird normalerweise von den IDE / dev-Tools generiert, daher ist sie normalerweise für die verwendete Android-Version korrekt.Antworten:
In einem regulären Android-Projekt werden Konstanten in der Klasse R der Ressource wie folgt deklariert:
Ab ADT 14 werden sie in einem Bibliotheksprojekt jedoch wie folgt deklariert:
Mit anderen Worten, die Konstanten sind in einem Bibliotheksprojekt nicht endgültig. Daher würde Ihr Code nicht mehr kompiliert.
Die Lösung hierfür ist einfach: Konvertieren Sie die switch-Anweisung in eine if-else-Anweisung.
http://tools.android.com/tips/non-constant-fields
Sie können eine
switch
Anweisung schnell wieif-else
folgt in eine Anweisung konvertieren :Bewegen Sie in Eclipse den Cursor auf das
switch
Schlüsselwort und drücken Sie Ctrl+ 1und wählen Sie dannBewegen Sie den Cursor in Android Studio auf das
switch
Schlüsselwort und drücken Sie Alt+ Enterund wählen Sie dannquelle
final
Schlüsselwort kann eine Variable zur Laufzeit geändert werden.Das Deaktivieren von "Ist Bibliothek" im Projekt Eigenschaften hat für mich funktioniert.
quelle
Die Lösung kann folgendermaßen erfolgen:
Beispiel:
Hoffe das wird dir helfen.
quelle
R.id. *, da ADT 14 nicht mehr als endgültiges statisches int deklariert ist, können Sie es nicht im Switch-Case-Konstrukt verwenden. Sie können stattdessen die if else-Klausel verwenden.
quelle
Eine einfache Lösung für dieses Problem ist:
Klicken Sie auf den Schalter und drücken Sie dann STRG + 1. Dadurch wird der Schalter in die Blockanweisung if-else geändert und das Problem behoben
quelle
Wie wäre es mit dieser anderen Lösung, um den netten Schalter anstelle eines Wenn-Sonst zu behalten:
In Ihrem Code können Sie also Folgendes tun:
Aufzählungen sind statisch, daher hat dies nur sehr begrenzte Auswirkungen. Das einzige Problem, das Anlass zur Sorge gibt, ist die doppelte Suche (zuerst im internen SparseArray und später in der Switch-Tabelle).
Das heißt, diese Aufzählung kann auch verwendet werden, um die Gegenstände auf fließende Weise abzurufen, wenn dies erforderlich ist, indem ein Verweis auf die ID beibehalten wird ... aber das ist eine Geschichte für eine andere Zeit.
quelle
Dieser Fehler wurde ausgelöst, als ich switch in einer Funktion mit in meiner Klasse deklarierten Variablen verwendete:
Das Problem wurde gelöst, als ich
final
zu Beginn der Klasse die Variablen deklarierte :quelle
enum
ist eine bessere Alternative zuint
in diesem Fall. Der Aufrufer der Methode kann die Funktion mit ungültigem Typ nicht aufrufen.i have specific int types so its ok if i use ints
Macht eigentlich keinen Sinn. Beispiel für eine Aufzählung: docs.oracle.com/javase/tutorial/java/javaOO/enum.htmli mean that the incoming int variable type in the function will always be one of these 3 types so it won't break anything
Dies ist Ihre Annahme. Jemand anderes kann die Funktion mit einer beliebigen Nummer falsch aufrufen. Mitenum
müssen Sie nicht davon ausgehen, dass es von der Sprache erzwungen wird.Ich möchte erwähnen, dass ich auf die gleiche Situation gestoßen bin, als ich versucht habe, meinem Projekt eine Bibliothek hinzuzufügen. Plötzlich zeigten alle switch-Anweisungen Fehler!
Jetzt habe ich versucht, die Bibliothek, die ich hinzugefügt habe, zu entfernen, auch dann hat es nicht funktioniert. Wie auch immer " als ich das Projekt bereinigte ", gingen alle Fehler einfach weg!
quelle