简体   繁体   English

为什么要使用ArrayList <MyClass> 突然改变它的价值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM