2016-10-28 2 views
-1

Ich habe eine sehr dumme und elementare Fragen, aber ich kann nicht scheinen, um es zu umgehen. Ich versuche, Daten zwischen drei Klassen passieren, so ist dies der Ansatz, den ich nahm:Java Daten zwischen zwei Klassen

Klasse A

public class GroupChat { 

    public String message; 
    public String myId; 
    public String otherID; 

    public GroupChat() { 

    } 

    public String getOtherID() { 
     return otherID; 
    } 

    public void setOtherID(String otherID) { 
     this.otherID = otherID; 
    } 

    public String getMyId() { 
     return myId; 
    } 

    public void setMyId(String myId) { 
     this.myId = myId; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 
} 

Klasse B -, die die Daten auf die Schaltfläche erzeugt klicken

GroupChat chat = new GroupChat(); 
chat.setParticipants(participants); 
chat.setMyId(userId); 
chat.setOtherID(id); 
chat.setMessage(message); 

Als ich Drucken Sie das Protokoll dieser Variablen in der GroupChat-Klasse aus, alles ist perfekt.

Wenn ich jedoch versuche, die Getter zu verwenden, um Daten in Klasse C zu bekommen, wo ich sie brauche, geben sie einen Nullwert zurück.

Klasse C

GroupChat chat = new GroupChat(); 
chat.getMessage(), 
chat.getItemView(), 
chat.getMyId(), 
chat.getOtherID()); 

Ich habe sogar versucht, die Daten in der Klasse Groupchat anmelden. Wenn ich die Daten unter Verwendung der Setter eintrage, ist alles in Ordnung, wenn jedoch die Daten auf den Gettern aufgezeichnet werden, geben diese NULL zurück. In der GroupChat-Klasse muss etwas vorhanden sein, das die Variablen ungültig macht.

Kann mir bitte jemand in die richtige Richtung zeigen? Tausend Dank.

+3

Sind Sie sicher, dass Sie die gleiche Instanz von 'GroupChat' verwenden? Wenn Sie an beiden Stellen 'new' verwenden, haben Sie es mit zwei verschiedenen Instanzen zu tun. Das Setzen von Werten auf eins wirkt sich nicht auf das andere aus. – 0x5453

+0

Ich glaube, Sie müssen die Werte in Klasse C festlegen oder Ihr GroupChat-Objekt weitergeben. –

+0

ahaaaa, also was muss ich tun, um die gleiche Instanz von GroupChat zu haben? –

Antwort

4

Jedes Mal, wenn Sie anrufen:

GroupChat chat = new GroupChat(); 

Sie schaffen neues Objekt mit Standardwerten (zB 0, nulls).

Wenn Sie Ihr Objekt "B" verwenden möchten, müssen Sie es von der Funktion zurückgeben, in der Sie Setter aufrufen.

z.

public GroupChat getDataAfterButtonPress() { 
    GroupChat chat = new GroupChat(); 
    chat.setParticipants(participants); 
    chat.setMyId(userId); 
    chat.setOtherID(id); 
    chat.setMessage(message); 
    return chat; 
} 

Dann können Sie dieses Objekt verwenden, später in Ihrem Code:

GroupChat result = getDataAfterButtonPress(); 
+0

Aber wie kann ich getDataAfterButtonPress() an eine andere Klasse weitergeben? –

+0

Um dies zu beantworten, brauche ich mehr Details zur Architektur. Aber ich denke, es reicht gerade aus, um GroupChat vom Listener zurückzugeben, der aufgerufen wird, wenn der Benutzer die Taste drückt. – mko

0

Es ist schwer, ohne vollständigen Code zu schließen. Das einzige Problem, das ich sehen kann, ist, dass Sie in beiden Fällen verschiedene Instanzen verwenden. Wenn in der Klasse C, eine neue Groupchat statt Bestehen der erstellen erstellen Sie in der Klasse B.

+0

Wie kann ich dieselbe Instanz verwenden? –

+0

In Klasse C fügen Sie einen Setter oder einen Parameter im Konstruktor hinzu. –

+0

Stellen Sie sicher, dass Sie nicht wiederverwenden. Sie können neue ClassC (existingInstance) oder neue ClassC.setChat (existingInstance) tun. –