最近在项目遇到个java.lang.NumberFormatException 类型的异常报错,很奇葩,把我都看蒙了,也不是必现的;
具体报错如下:
对应地方的代码是:
mCurrentCameraId 是字符型,并且是不为空的,值不是1就是0; lastSubLightValue是int型定义为了-1
@Override
protected void onProgressUpdate(String... values) {
int subLightLevel = Integer.parseInt(values[0]);
boolean isCovered = subLightLevel == (mSubcameraType == SUBCAMERA_TYPE_REAL_CAM ? 1 : 0);
if(isCovered && !CameraUtil.isCameraFacingFront(mApp.getActivity(), mCurrentCameraId)
&& subLightLevel == lastSubLightValue
&& "Portrait".equals(mCurrentModeType)){
if (!isHintShow) {
showScreenHint(mOcclusionHint);
isHintShow = true;
}
} else {
hideScreenHint(mOcclusionHint);
isHintShow = false;
}
lastSubLightValue = subLightLevel;
}
其中isCameraFacingFront方法是有个isCameraFacingFront(context, Integer.parseInt(mCurrentCameraId))做转换
为什么if条件中 把&& subLightLevel == lastSubLightValue 一同当作字符先给我带入前面的 转换的条件中去了,
就很奇葩
跟if中的条件肯定没关系的,只是刚好形参中的值和你的条件相似而已。
int subLightLevel = Integer.parseInt(values[0]);
报错的点是这里,说明values数组中第一个元素内容有可能存在非数值型的字符,你加个log记录一下看看。
传参问题导致的。
subLightLevel 和 lastSubLightValue 是数值类型,而 mCurrentCameraId 是字符串类型。
在 Java 中,如果你要将一个非数字的字符串转换为数字的时候,就会抛出 NumberFormatException 这个异常。
【解决方案】
1、可以使用 Integer.parseInt(mCurrentCameraId) 将 mCurrentCameraId 字符串转换为整数;
2、将 subLightLevel 和 lastSubLightValue 与其他条件进行比较之前,也需要确保它们是数值类型。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
报错信息就是数值类型的字段,字符串转换为数值报错,建议断点调试一下,或者控制台先输出这两个参数的值。确认不是字符串。
或者数据库查询一下是否字段是否是数值类型
int subLightLevel = Integer.parseInt(values[0]);