【问题】
折腾:
【记录】Android中创建进程或线程去实现USB设备插入的状态检测
期间,定义了个枚举。
然后打算在switch的case中使用,结果出错:
Type mismatch: cannot convert from DeviceListActivity.usb_action to int |
如图:
【解决过程】
1.参考:
Java using enum with switch statement
去试试,
public enum usb_action{ USB_ACTION_UNKNOWN, USB_ACTION_ATTACH, USB_ACTION_DETACH, }; public Handler mHandler=new Handler() { public void handleMessage(Message msg) { usb_action curUsbAction = usb_action.values()[msg.what]; //do your own bounds checking switch(curUsbAction) { case usb_action.USB_ACTION_UNKNOWN: //do sth. break; default: break; } super.handleMessage(msg); } };
结果还是出错:
The qualified case label DeviceListActivity.usb_action.USB_ACTION_UNKNOWN must be replaced with the unqualified enum constant USB_ACTION_UNKNOWN |
如图:
2.所以再去改为:
public enum usb_action{ USB_ACTION_UNKNOWN, USB_ACTION_ATTACH, USB_ACTION_DETACH, }; public Handler mHandler=new Handler() { public void handleMessage(Message msg) { usb_action curUsbAction = usb_action.values()[msg.what]; //do your own bounds checking switch(curUsbAction) { case USB_ACTION_UNKNOWN: //do sth. break; default: break; } super.handleMessage(msg); } };
就可以了。
【总结】
如上图,使用类似于这样的写法:
public enum usb_action{ USB_ACTION_UNKNOWN, USB_ACTION_ATTACH, USB_ACTION_DETACH, }; public Handler mHandler=new Handler() { public void handleMessage(Message msg) { usb_action curUsbAction = usb_action.values()[msg.what]; //do your own bounds checking switch(curUsbAction) { case USB_ACTION_UNKNOWN: //do sth. break; default: break; } super.handleMessage(msg); } };
就可以了。
注:
暂时不知道:
case xxx;
中的xxx,为何写成:
usb_action.USB_ACTION_UNKNOWN
会出错,而必须写成:
USB_ACTION_UNKNOWN
转载请注明:在路上 » 【已解决】android中switch中的case中不用使用enum枚举值:Type mismatch: cannot convert from xxx to int