我在写一个需要保存来自加速度计的值的应用程序。我通过使用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的新手。
我必须是盲人,因为我没有看到搜索文档后:)。感谢您的指导! –