我在寫一個需要保存來自加速度計的值的應用程序。我通過使用ArrayList來做到這一點,然後當onAccelerationChanged(...)被調用時,我只需將這些值添加到列表中。問題是,如此多的值(從不一致)被推入列表後,它開始用我正在添加的值覆蓋這些值。我想我正在做一些愚蠢的事情,所以我拿着'加速器播放示例'並修改onSensorChanged(...)來做同樣的事情。這樣做會重現這個問題。ArrayList <SensorEvent> .add(...)開始覆蓋值
變量添加到類:
private ArrayList<SensorEvent> _accelData = new ArrayList<SensorEvent>();
onSensorChanged:
@Override
public void onSensorChanged(SensorEvent event)
{
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
return;
Log.e("Event to Add", event.timestamp + ", " + event.accuracy + ", " + event.values[0] + ", " + event.values[1]
+ ", " + event.values[2]);
_accelData.add(event);
if (_accelData.size() > 25) {
for (SensorEvent tmp_event : _accelData) {
Log.e("Events in list", tmp_event.timestamp + ", " + tmp_event.accuracy + ", " + tmp_event.values[0] + ", "
+ tmp_event.values[1] + ", " + tmp_event.values[2]);
}
_accelData.clear();
}
}
在左邊是這應該被添加並在右側爲26後打印出的列表中的每個事件添加被執行。正如你所說的那樣,應該添加的值與列表本身不匹配,並且列表中的最後一個值和倒數第二個值有很多重複。
,我通過提出一個新的類,它在一個事件,並複製這些值修正了這個。然後我讓ArrayList取而代之。它的工作原理,但我不明白爲什麼,並希望有人能夠教育我,因爲我是Java和Android的新手。
我必須是盲人,因爲我沒有看到搜索文檔後:)。感謝您的指導! –