I was working on an android project using eclipse and suddenly i started to get this error:
Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted.
I tried every solution in previous similar issues but none of them worked for me...
I have Tried fixing the project and setting the JDK compliance level to 1.7 in both my project and for all project.
I am using ADT Build: v22.2.1-833290 and Eclipse:
String text = mService.getString();
switch (text) {
case Protocols.REQUEST_SEND_MESSAGE:
publishProgress("sent");
break;
case Protocols.RESPONSE_OK:
mService.sendMessage("mesasage");
publishProgress("sent");
break;
default:
break;
}
What's going on?
You are trying to use
switch
/case
withString
objects, which is only available in Java 1.7 or higher. Android ADT requires Java 1.6. This means you cannot useswitch
withString
construct. Just replace it withif
/else
.Replace your code with this.
Another option would be to create an
enum
and put all Protocol constants into there. Then you will be able to useswitch
/case
withenum
values.As the answer below gives more details, switch statement on String objects is a new feature introduced in Java 1.7. Unfortunatelly Android requires version 1.6 or 1.5. :
https://stackoverflow.com/a/14367642/1572408