[英]Why does an ArrayList<MyClass> suddenly change its values
I got an ArrayList<MyClass>
that is filled with Measure
objects, i got from the acceleration sensor of a cell phone. 我有一个ArrayList<MyClass>
,其中充满了Measure
对象,是从手机的加速度传感器获取的。 The objects have another ArrayList with 150 measure values. 这些对象还有另一个带有150个度量值的ArrayList。 When I investigate on this Arraylist while debugging, it is getting filled correctly. 当我在调试时调查此Arraylist时,它已正确填充。 But after i want to take that ArrayList with a button event, the values have changed. 但是在我想使用按钮事件获取ArrayList之后,值已更改。 the number of objects inside stays the same, but its alway one identical object, that wasnt in the ArrayList before. 内部对象的数量保持不变,但始终是一个相同的对象,该对象以前不在ArrayList中。 I hope, you could give me a little hint what to do here. 希望您能给我一点提示,在这里做什么。 Its so confusing... 太令人困惑了...
public class StartDesk extends AppCompatActivity implements SensorEventListener{
private ArrayList<SingleSwing> alSwingsCurSession;
private ArrayList<SingleAccValue> alSavedAccValues;
private AudioSensorClass asc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_desk);
...
alSavedAccValues = new ArrayList<>();
bRecording = false;
btnStart = (Button) findViewById(R.id.btnStart);
btnStart.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
RecordButtonHandler();
}
});
}
private void RecordButtonHandler() {
if(!bRecording) {
alSwingsCurSession = new ArrayList<>();
...
}
else {
btnStart.setText("Start Recording");
if (alSwingsCurSession.size() > 0) {
...
}
bRecording = false;
}
}
...
private void SaveSwingINI(ArrayList<SingleAccValue> al_SavedAccValues) {
if(al_SavedAccValues.size()>=150) {
SingleSwing swing = new SingleSwing();
swing.setAl_MeasureData(al_SavedAccValues);
alSwingsCurSession.add(swing);
}
}
...
}
alSwingsCurSession
has other values, when calling it at the button events, then it gets in the SaveSwingINI
method. alSwingsCurSession
具有其他值,当在按钮事件中调用它时,它将进入SaveSwingINI
方法。 I got no static fields in my Classes. 我的班级没有静态字段。
"al_SavedAccValues" is always the same ArrayList<> from one point of the memory. 从内存的一点开始,“ al_SavedAccValues”始终是相同的ArrayList <>。 making a new "al_SavedAccValues" Arraylist in the "SaveSwingINI" method was helpful. 在“ SaveSwingINI”方法中创建新的“ al_SavedAccValues”数组列表很有帮助。
private void SaveSwingINI(ArrayList<SingleAccValue> al_SavedAccValues) {
if(al_SavedAccValues.size()>=150) {
SingleSwing swing = new SingleSwing();
ArrayList<SingleAccValue> al_SwingValues = new ArrayList<>(al_SavedAccValues);
swing.setAl_MeasureData(al_SwingValues);
alSwingsCurSession.add(swing);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.