切换case语句错误: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
:
将光标移至switch
关键字,然后按Ctrl
+,1
然后选择
将’switch’转换为’if-else’。
中将光标移至switch
关键字,然后按Alt
+,Enter
然后选择
将“ switch”替换为“ if”。
以上是 切换case语句错误:case表达式必须为常量表达式 的全部内容, 来源链接: utcz.com/qa/416580.html