2017-02-12 47 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); 
     } 
    } 
相关问题