2017-02-12 4 views
0

Ich habe eine ArrayList<MyClass>, die mit Measure Objekte gefüllt ist, bekam ich vom Beschleunigungssensor eines Mobiltelefons. Die Objekte haben eine andere ArrayList mit 150 Messwerten. Wenn ich diese Arraylist beim Debuggen untersuche, wird sie korrekt gefüllt. Aber nachdem ich diese ArrayList mit einem Button-Event aufnehmen möchte, haben sich die Werte geändert. Die Anzahl der Objekte im Inneren bleibt gleich, aber es ist immer ein identisches Objekt, das vorher nicht in der ArrayList war. Ich hoffe, du könntest mir einen kleinen Hinweis geben, was ich hier tun soll. Es ist so verwirrend ...Warum ändert eine ArrayList <MyClass> plötzlich ihre Werte

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 andere Werte hat, wenn es auf den Knopf Ereignisse aufrufen, dann wird es in der SaveSwingINI Methode. Ich habe keine statischen Felder in meinen Klassen.

+0

Mögliches Duplikat [Warum wird meine Arraylist enthält N Kopien des letzten Elements in die Liste aufgenommen?] (Http://stackoverflow.com/questions/19843506/why-does-my-arraylist-contain- n-Kopien-des-letzten-Item-added-to-the-list) – shmosel

+0

Ich habe nur überprüft, dass es in meinen Klassen keine statischen Felder gibt. – iGzorn

+0

Kann ich nicht wirklich aus den hier gegebenen Informationen ersehen. Es wird sehr hilfreich sein, wenn Sie [ein minimales, vollständiges und überprüfbares Beispiel erstellen] (http://stackoverflow.com/help/mcve). –

Antwort

1

"al_SavedAccValues" ist immer die gleiche ArrayList <> von einem Punkt des Speichers. eine neue "al_SavedAccValues" Arraylist in der "SaveSwingINI" -Methode war hilfreich.

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); 
     } 
    } 
Verwandte Themen