case expressions must be constant expressions报错Android

“case expressions must be constant expressions”,许多小伙伴可能有遇到像我这样的问题。我是在做二维码扫描出现这个问题的,我把二维码的demo改成库,然后clean就出现这个问题。报错代码如下:

@Override
	public void handleMessage(Message message) {
		switch (message.what) {
		case R.id.decode:
			decode((byte[]) message.obj, message.arg1, message.arg2);
			break;
		case R.id.quit:
			Looper.myLooper().quit();
			break;

		default:
			break;
		}
	}
我们把鼠标放在提示错误的代码行上,提示case expressions must be constant expressions,英文好一点点的小伙伴立马知道这个是说case表达式必须是常量表达式,这一点说的没错,可为什么就我把代码变成库才会报这个错呢?把lib选项勾掉再clean就又不报错了呢?id不都是常量的吗?呵呵,先让我带着这个疑问,先来看看问题怎么解决。

百度了许久都是说要把case里面的表达式改为常量,又或者说把lib的选项去掉,这两个方案适合别的情况。所以这两个解决方案都不是我想要的。嗯......让我们回到源头,他说case的表达式必须为常量,那我们就不用case,把它改为if-else不就可以了,于是这就得出我的解决方案。

有一个快捷方式可以把switch语句变成if-else,就是把鼠标放在switch上面,按住Ctrl+1,让系统自动转换哈(懒人自有方法哈哈哈)。


代码变成这样就不会报错了

@Override
public void handleMessage(Message message) {
	if (message.what == R.id.decode) {
		decode((byte[]) message.obj, message.arg1, message.arg2);
	} else if (message.what == R.id.quit) {
		Looper.myLooper().quit();
	} else {
	}
}
现在让我们回到之前那个为什么上?百度了许久终不知何原因,因此今天特地记下这个错误,如果有幸被哪位知道原因的大神看到,请花几秒钟跟我说下哈。

有个问题不弄清楚,不知为什么浑身不舒服,在StackOverflow上找到问题:http://stackoverflow.com/questions/9092712/switch-case-statement-error-case-expressions-must-be-constant-expression,我去对比了一下把代码变成lib的资源id,还真不一样:

  public static int bg_color=0x7f050000;
  public static int contents_text=0x7f050001;
  public static int encode_view=0x7f050002;
  public static final int bg_color=0x7f050000;
  public static final int contents_text=0x7f050001;
  public static final int encode_view=0x7f050002;
把普通项目变成lib时,里面的资源id就不再是常量,可这又是为什么呢?我们最终把问题变成了lib里面的资源id的定义为啥不是常量了。这个问题又百度不到了,呵呵,等知道再来记下。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值