我的應用程序使用接近傳感器在應用程序的主要活動時打開/關閉屏幕。這工作得很好,但是我已經從一個的HTC One S的用戶收到的崩潰報告:接近傳感器報告值「38,654,705,664」
11月8日至23日:25:04.754 E/AndroidRuntime(30499):致命異常:主要 11月8日至23日: 25:04.754 E/AndroidRuntime(30499):java.lang.NumberFormatException:無效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):at 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);
}
這是用戶端的傳感器校準問題,還是我可以簡單地用try/catch來包圍整數解析,以避免出現像「38,654,705,664」這樣明顯錯誤的值?
爲什麼不簡單地調用'int dis =(int)sensor;'? –
堆棧跟蹤(38,654,705,664)中的值超出了int的最大可能值(2,147,483,647),所以這沒有幫助。我可以使用'長',但38,654,705,664顯然不是一個「真正的」接近值,所以我不知道這裏發生了什麼。 – Nick
在您的代碼中,您將float轉換爲字符串,然後將字符串轉換爲int。如果float超出max int值,你期望在日誌中看到什麼? –