2017-02-12 3 views
0

У меня есть ArrayList<MyClass>, который заполнен объектами Measure, которые я получил от датчика ускорения сотового телефона. Объекты имеют еще один ArrayList с 150 значениями измерения. Когда я исследую этот 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-copy-of-the-last-item-added-to-the-list) – shmosel

+0

Я просто дважды проверял, что в моих классах нет статических полей – iGzorn

+0

Не могу сказать по приведенной здесь информации. Это поможет вам, если вы [создаете минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve). –

ответ

1

«al_SavedAccValues» всегда один и тот же ArrayList <> с одной точки памяти. Создание нового «al_SavedAccValues» Arraylist в методе «SaveSwingINI» было полезно.

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); 
     } 
    } 
Смежные вопросы