NumberFormatException 错误

最近在项目遇到个java.lang.NumberFormatException 类型的异常报错,很奇葩,把我都看蒙了,也不是必现的;
具体报错如下:

img

对应地方的代码是:

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 与其他条件进行比较之前,也需要确保它们是数值类型。

如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

报错信息就是数值类型的字段,字符串转换为数值报错,建议断点调试一下,或者控制台先输出这两个参数的值。确认不是字符串。
或者数据库查询一下是否字段是否是数值类型

该回答引用ChatGPT
根据代码和报错信息,可以看出问题出在将字符串转换为整数时出现了NumberFormatException错误。具体来说,是在以下代码中出现的问题:

int subLightLevel = Integer.parseInt(values[0]);

这里将字符串 `values[0]` 转换为整数时,如果字符串不是一个合法的整数,就会抛出NumberFormatException异常。
在这个问题的代码中,我们可以看到 `values[0]` 是从 `onProgressUpdate` 方法的参数中获取的。因此,我们需要检查在调用 `publishProgress` 方法时传递的参数是否正确。
此外,我们还需要检查 `subLightLevel` 和 `lastSubLightValue` 的类型是否匹配。在代码中,`lastSubLightValue` 被定义为 `int` 类型,而 `subLightLevel` 是从字符串转换而来的。如果 `subLightLevel` 转换失败,它将保持默认值 `0`,这可能会导致类型不匹配的问题。
最后,我们还需要检查 `mCurrentCameraId` 的值是否正确。在代码中,`mCurrentCameraId` 被定义为字符串类型,但它的值只能是 `0` 或 `1`。如果它的值不是这两个值之一,那么在调用 `isCameraFacingFront` 方法时可能会出现问题。
综上所述,我们需要检查以下几个方面:
1. 检查在调用 `publishProgress` 方法时传递的参数是否正确。
2. 检查 `subLightLevel` 和 `lastSubLightValue` 的类型是否匹配。
3. 检查 `mCurrentCameraId` 的值是否正确。