Java 使用Eclipse的Android项目出现错误:无法为低于1.7的源代码级别打开字符串类型的值

Java 使用Eclipse的Android项目出现错误:无法为低于1.7的源代码级别打开字符串类型的值,java,android,eclipse,switch-statement,adt,Java,Android,Eclipse,Switch Statement,Adt,我正在使用eclipse开发一个android项目,突然我发现了这个错误: 无法为低于1.7的源级别打开字符串类型的值。只允许使用可转换的int值或枚举变量 在以前的类似问题中,我尝试了所有的解决方案,但没有一个对我有效 在我的项目和所有项目中,我都尝试过修复该项目,并将JDK遵从性级别设置为1.7 我正在使用ADT构建:v22.2.1-833290和Eclipse: String text = mService.getString(); switch (text) { case Pro

我正在使用eclipse开发一个android项目,突然我发现了这个错误:

无法为低于1.7的源级别打开字符串类型的值。只允许使用可转换的int值或枚举变量

在以前的类似问题中,我尝试了所有的解决方案,但没有一个对我有效

在我的项目和所有项目中,我都尝试过修复该项目,并将JDK遵从性级别设置为1.7

我正在使用ADT构建:v22.2.1-833290和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;
}

发生了什么事?

您正在尝试将
开关
/
大小写
用于
字符串
对象,该对象仅在Java 1.7或更高版本中可用。Android ADT需要Java 1.6。这意味着您不能将
开关
字符串
构造一起使用。如果/
其他
,只需将其替换为

用这个替换你的代码

String text=mService.getString();
if (Protocols.REQUEST_SEND_MESSAGE.equals(text)) {
    publishProgress("sent");
} else if (Protocols.RESPONSE_OK.equals(text)) {
    mService.sendMessage("mesasage");
    publishProgress("sent"); 
}

另一个选项是创建一个
enum
,并将所有协议常量放入其中。然后,您可以将
开关
/
大小写
枚举
值一起使用。

您尝试将
开关
/
大小写
字符串
对象一起使用,该对象仅在Java 1.7或更高版本中可用。Android ADT需要Java 1.6。这意味着您不能将
开关
字符串
构造一起使用。如果
/
其他
,只需将其替换为

用这个替换你的代码

String text=mService.getString();
if (Protocols.REQUEST_SEND_MESSAGE.equals(text)) {
    publishProgress("sent");
} else if (Protocols.RESPONSE_OK.equals(text)) {
    mService.sendMessage("mesasage");
    publishProgress("sent"); 
}

另一个选项是创建一个
enum
,并将所有协议常量放入其中。然后您将能够使用
switch
/
case
enum
值。

下面的答案提供了更多细节,字符串对象上的switch语句是Java 1.7中引入的一个新特性。不幸的是,Android需要1.6或1.5版:


下面的答案给出了更多细节,字符串对象上的switch语句是Java 1.7中引入的一个新特性。不幸的是,Android需要1.6或1.5版:


请您提供一些已添加的编解码器,但我想@beworker的答案是合乎逻辑的。我可以使用
如果/else
请您提供一些已添加的编解码器,但我想@beworker的答案是合乎逻辑的。我可以用
if/else
好的,非常感谢。但是有没有办法绕过这个错误呢?更新?还是插件?可能是一个新的Eclipse或ADT版本或更新?是的,我已经将其实现为
if/else
,但是代码变得有点混乱,因为案例太多了,所以我想通过
切换
案例使其更整洁。感谢您的帮助。在Android开始支持Java1.7之前,您必须一直将此代码重构为if/else。没有其他可用选项。另一个选项是从协议常量创建枚举。然后可以在switch/case中使用枚举值。但是Android性能指南不建议使用枚举,因为它们是内存密集型的。我也会研究一下。好的,非常感谢。但是有没有办法绕过这个错误呢?更新?还是插件?可能是一个新的Eclipse或ADT版本或更新?是的,我已经将其实现为
if/else
,但是代码变得有点混乱,因为案例太多了,所以我想通过
切换
案例使其更整洁。感谢您的帮助。在Android开始支持Java1.7之前,您必须一直将此代码重构为if/else。没有其他可用选项。另一个选项是从协议常量创建枚举。然后可以在switch/case中使用枚举值。但是Android性能指南不建议使用enum,因为它们占用大量内存。我也会研究一下。谢谢,在那篇文章后面有一个有用的链接可以查看。谢谢,在那篇文章后面有一个有用的链接可以查看