Wieso überschreibt meine add() Funktion meine Arraylist?

4 Antworten

das Problem dürfte sein, dass Du an der Stelle wo addNewUser() aufgerufen wird nicht jedesmal einen neuen mit new() erstellten BeanUsers übergibts....sondern immer wieder das gleiche Objekt mit geänderten Attributen,,,

Bayera 
Fragesteller
 11.05.2016, 13:25

Ich dachte, dass das new ein neues Objekt erstellt?!

0

Sicher dass du vor der Übergabe auch tatsächlich ein neues Objekt erstellst?

Die Anzahl der Items in der Liste müsste sich ja erhöhen? Wenn aber alle die selben Werte haben machst du bei der Instantiierung was falsch.

Bayera 
Fragesteller
 11.05.2016, 13:00

Die Übergabe erfolgt so:

BeanUsers zuSpeichernderUser = new BeanUsers();
zuSpeichernderUser.setBenutzername(txtUserName.getText().toString());
zuSpeichernderUser.setFortschritt("hier steht der Fortschritt");

int i=FileHandler.getInstance().addNewUser(zuSpeichernderUser);
0

Da sehe ich keinen Fehler, vllt liegt der ja ganz wo anderst?  Vllt liegts daran, dass du immer dasselbe Objekt bearbeitest (Objekte sind in Java Referenzvariablen!)

Bayera 
Fragesteller
 11.05.2016, 12:56

Ich habe es auch schon so probiert, was das dann doch ausschließen sollte:

public int addNewUser (BeanUsers neuer)
{
BeanUsers Temp=new BeanUsers();
Temp=neuer;
this.allUser.add(Temp);
return this.allUser.indexOf(neuer);
}
0
triopasi  11.05.2016, 13:06
@Bayera

Nein, ich glaube damit ist Temp eine Referenz auf neuer. Probiere mal 

BeanUser tmp = new BeanUser(neuer);

PS: Code Conventions von Java anschauen! Klassennamen immer im Singular und Variablen beginnen mit Kleinbuchstaben!!

0
MalNachgedacht  11.05.2016, 13:24
@Bayera
public int addNewUser (BeanUsers neuer)
{
BeanUsers Temp=new BeanUsers();
Temp=neuer;
this.allUser.add(Temp);
return this.allUser.indexOf(neuer);
}

Fast richtig - aber trotzdem falsch:

Du erstellst zwar jedesmal ein neues BeanUsers() Objekt und speicherst es in Temp - aber danach ist alles für die Katz weil Du Temp ja wieder das Objekt in neuer zuweist,

Stattdessen solltest Du ein neues BeanUsers Objekt dort erstellen wo addNewUser() aufgerufen wird....

0
Bayera 
Fragesteller
 11.05.2016, 13:27
@MalNachgedacht

Habe ich ja vorher quasi gemacht:

BeanUsers zuSpeichernderUser = new BeanUsers();
zuSpeichernderUser.setBenutzername(txtUserName.getText().toString());
zuSpeichernderUser.setFortschritt("hier steht der Fortschritt");

int i=FileHandler.getInstance().addNewUser(zuSpeichernderUser);
0
MalNachgedacht  11.05.2016, 13:50
@Bayera

sieht richtig aus - bist Du sicher, dass der Fehler nicht der Routine ist mit der Du BeanUsers in allUser ausgibst/weiterverarbeitest. Eventuell greifst Du ja dort irrtümlich immer auf das gleiche Element von allUser und glaubst deswegen das alle Elemente gleich wären - obwohl sie das in Wahrheit gar nicht sind?

0
Bayera 
Fragesteller
 11.05.2016, 13:59
@MalNachgedacht

hab ich auch schon ausgeschlossen, da ich es mit ner zusätzlichen Textzeile einfach ausgegeben habe und zusätzlich mit dem Debugger geschaut habe. dort erstellt er auch neue Objekte mit unterschiedlichen Addressen aber trotzdem überschreibt das Programm die Inhalte.

und von Hand habe ich ausprobiert die Liste von Hand zu machen und das klappt auch einwandfrei. deswegen wundert mich das halt tierisch, warum der das nicht bei dieser FUnktion  so macht.

0
MalNachgedacht  11.05.2016, 14:35
@Bayera

zeig mal den Code deiner BeanUsers Klasse

hat die STATIC Variable oder STATIC Methoden?

0

Also da ist kein Fehler. - Demnach wäre interessant zu wissen, wie du darauf kommst, dass es einen Fehler geben könnte?

Ich hab mal ein Bean 'erraten' und kann das nicht nachvollziehen:

http://pastebin.com/Na1K8AGC

kannst du bitte etwas konkreter werden?