0

我的应用程序使用接近传感器在应用程序的主 Activity 上打开/关闭屏幕。这工作正常,但是我收到了来自 HTC One S 用户的崩溃报告:

08-23 11:25:04.754 E/AndroidRuntime(30499): 致命异常: main 08-23 11:25:04.754 E/AndroidRuntime(30499): java.lang.NumberFormatException: Invalid int: "38,654,705,664" 08-23 11 :25:04.754 E/AndroidRuntime(30499): at java.lang.Integer.invalidInt(Integer.java:138) 08-23 11:25:04.754 E/AndroidRuntime(30499): at java.lang.Integer.parse( Integer.java:375) 08-23 11:25:04.754 E/AndroidRuntime(30499): 在 java.lang.Integer.decode(Integer.java:188) 08-23 11:25:04.754 E/AndroidRuntime(30499) : 在 com.myapp.MyActivity.onSensorChanged(NotificationActivity.java:793) 08-23 11:25:04.754 E/AndroidRuntime(30499): 在 android.hardware.SystemSensorManager$ListenerDelegate$1.handleMessage(SystemSensorManager.java:204)

我正在使用的代码是

private NumberFormat numForm = new DecimalFormat(); 

@Override
public void onSensorChanged(SensorEvent event) {
    float sensor = event.values[0];
    String cm = numForm.format(sensor);
    int dis = Integer.decode(cm);

    Log.i(TAG, "Proximity distance: " + dis);
}

这是用户端的传感器校准问题,还是我可以简单地用 try/catch 包围整数解析以避免明显错误的值,如“38,654,705,664”?

4

1 回答 1

2

将表单float转换为int永远不会导致异常。在像您这样的情况下,我们只是失去了准确性。如果您需要一个“完整”值,您应该使用而float不是尝试强制转换它。现在关于传感器 API 的错误值。他们总是可以来的。如果您能识别它们,您可以将它们排除在计算之外。如果这是必须的要求,您可以实现一些统计过滤器。希望这可以帮助。

于 2013-08-23T13:10:24.907 回答