簡體   English   中英

為什么要使用ArrayList <MyClass> 突然改變它的價值

[英]Why does an ArrayList<MyClass> suddenly change its values

我有一個ArrayList<MyClass> ,其中充滿了Measure對象,是從手機的加速度傳感器獲取的。 這些對象還有另一個帶有150個度量值的ArrayList。 當我在調試時調查此Arraylist時,它已正確填充。 但是在我想使用按鈕事件獲取ArrayList之后,值已更改。 內部對象的數量保持不變,但始終是一個相同的對象,該對象以前不在ArrayList中。 希望您能給我一點提示,在這里做什么。 太令人困惑了...

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具有其他值,當在按鈕事件中調用它時,它將進入SaveSwingINI方法。 我的班級沒有靜態字段。

從內存的一點開始,“ al_SavedAccValues”始終是相同的ArrayList <>。 在“ 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