2017-02-12 144 views
0

我得到一個ArrayList<MyClass>是充滿了Measure對象,我從手機的加速度傳感器。這些對象具有另一個包含150個度量值的ArrayList。當我在調試時對這個Arraylist進行調查時,它正在被正確填充。但是當我想用一個按鈕事件來獲取這個ArrayList後,這些值已經改變了。內部對象的數量保持不變,但它總是一個相同的對象,它不在ArrayList之前。我希望,你可以給我一些提示,在這裏做什麼。它如此混亂...爲什麼一個ArrayList <MyClass>突然改變其值

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方法獲取。我的類中沒有靜態字段。

+0

的可能的複製[爲什麼我的ArrayList中包含的最後一個項目的N份添加到列表中?](http://stackoverflow.com/questions/19843506/why-does-my-arraylist-contain- n-copies-of-the-last-item-added-to-the-list) – shmosel

+0

我只是再次檢查了我的班級中沒有靜態字段 – iGzorn

+0

從這裏給出的信息無法真實地分辨出來。如果你[創建一個最小化,完整和可驗證的例子](http://stackoverflow.com/help/mcve),它將會有很大的幫助。 –

回答

1

「al_SavedAccValues」始終與內存中的一個點相同ArrayList <>。 在「SaveSwingINI」方法 中創建新的「al_SavedAccValues」Arraylist很有幫助。

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); 
     } 
    } 
相關問題