开关case语句错误:case表达式必须是常量表达式吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (34)

我的switch-case语句昨天完全正常。但是当我今天早上运行代码时,eclipse给了我一个以红色表示的case语句的错误,并且说:case表达式必须是常量表达式,它是常量,我不知道发生了什么。以下是我的代码:

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

所有R.id.int都以红色加下划线。

提问于
用户回答回答于

在一个常规的Android项目中,资源R类中的常量声明如下:

public static final int main=0x7f030004;

但是,从ADT 14开始,在一个图书馆项目中,他们将被声明如下:

public static int main=0x7f030004;

换句话说,常量在图书馆项目中并不是最终的。因此你的代码将不再编译。

解决方案很简单:将switch语句转换为if-else语句。

public void onClick(View src)
{
    int id = src.getId();
    if (id == R.id.playbtn){
        checkwificonnection();
    } else if (id == 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(" ");
    } else if (id == R.id.btnmenu){
        openOptionsMenu();
    }
}

http://tools.android.com/tips/non-constant-fields

你可以使用以下命令将switch语句快速转换为语句if-else

在Eclipse 中将光标移到switch关键字上,然后按Ctrl+ 1然后选择

将'switch'转换为'if-else'。

在Android Studio 中将光标移至switch关键字并按Alt+,Enter然后选择

用'if'代替'switch'。

用户回答回答于

取消选中项目Properties中的“Is Library”

扫码关注云+社区