내 앱은 근접 센서를 사용하여 앱의 주요 활동 동안 화면을 켜거나 끕니다.근접 센서가 "38,654,705,664"와 같은 값을보고합니다.
11월 8일에서 23일까지 : 25 : 04.754 E/AndroidRuntime (30499) : 치명적인 예외 : 주요 11월 8일에서 23일까지 그러나 이것은 내가 HTC 하나 S 사용자로부터 충돌 보고서를받은, 잘 작동 : 25 : 04.754 E/AndroidRuntime (30499) : java.lang.NumberFormatException : 유효하지 않은 int : "38,654,705,664" 08-23 11 : 25 : 04.754 E/AndroidRuntime (30499) : java.lang.Integer.invalidInt (Integer.java) : 138) 08-23 11 : 25 : 04.754 E/AndroidRuntime (30499) : 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) 11월 8일부터 23일까지 : 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);
}
사용자의 센서 교정 문제입니까? 아니면 "38,654,705,664"와 같은 잘못된 값을 피하기 위해 정수 구문 분석을 try/catch로 둘러 쌀 수 있습니까?
단순히 'int dis = (int) sensor;'를 호출하지 않는 이유는 무엇입니까? –
stacktrace (38,654,705,664)의 값이 int의 가장 큰 가능한 값 (2,147,483,647)을 초과하므로 도움이되지 않습니다. 'long '을 사용할 수는 있지만 38,654,705,664는 분명히 "근접한"근접 값이 아니므로 여기서 무슨 일이 일어나고 있는지 모르겠습니다. – Nick
코드에서 float을 string으로 변환 한 다음 int를 string으로 변환합니다. float가 최대 int 값을 초과하면 log에 무엇을 나타낼 것으로 예상합니까? –