2016-03-23 7 views
0

Ich versuche, eine Methode zu machen, die int-Variable zurückgibt, aber die Methode wirkt sich nicht auf die Variable aus.Kann die deklarierte Variable nicht beeinflussen

Dies ist mein Code:

int count; 
public int getVotesForEvent(final String event_title) { 
    firebaseRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.child("Votes").exists()) { 
       boolean flag = false; 
       for (DataSnapshot event : dataSnapshot.child("Votes").getChildren()) { 
        String event_title2 = event.getKey(); 
        if (event_title2.equals(event_title)) { 
         flag = true; 
         Toast.makeText(EventInfo.this, ""+Integer.parseInt(event.child("event_votes").getValue().toString()), Toast.LENGTH_SHORT).show(); 
         count = Integer.parseInt(event.child("event_votes").getValue().toString()); 
        } 
       } 
       if (flag != true) { 
        count = 0; 
       } 
      } 
      else { 
       count = 0; 
      } 
     } 
    }); 
    return count; 
} 

Das Problem ist, dass die Zeile:

count = Integer.parseInt(event.child("event_votes").getValue().toString()); 

Diese Zeile nicht die Variable count wird bewirkt.

Was mache ich hier falsch?

+0

Was ist der Wert von "event_votes"? – user1301428

+0

Versuchen Sie genauer zu beschreiben, was genau Sie erwarten. Erwarten Sie, dass nach dem Aufruf von 'getVotesForEvent()' der Wert von 'count' geändert wird? Weil es nicht :) –

+0

Jemand von innerhalb firebaseRef wird 'onDataChange()' aufrufen. Nur wenn dies der Fall ist, sehen Sie ein change in Ihrer Variablen. – GVillani82

Antwort

1

Die Methode getVotesForEvent() selbst nicht rufen Sie den Code innerhalb. Daher wird der Wert count nicht geändert, da der Code von getVotesForEvent() zurückgegeben wird.

Die Methode fügt nur einen ValueEventListener (wie sein Name vorschlagen :) mit dem definierten Verhalten hinzu.

Nur nach ein onDataChange Ereignis auftritt, wird der Code innerhalb durchgeführt.

Es gibt keinen Sinn count von getVotesForEvent() bei der Rückkehr, wird es nur den Wert zurück, die es Ihnen dass Methode nicht, wenn der Wert von count Änderungen (manchmal in der Zukunft) genannt zu der Zeit war.

Um mit anderen Worten zu wiederholen: Wenn Sie addValueEventListener() aufrufen, sind Sie nicht ausgeführt der Code, den es enthält. Sie laden nur den Code, der später ausgeführt werden soll, wenn das entsprechende Ereignis eintritt.

Denken Sie Ihren Code wie folgt aus:

int count; 
public int getVotesForEvent(final String event_title) { 
    firebaseRef.addValueEventListener(what-shall-be-done-sometimes-in-the-future-when-onDataChange-event-occurs); 
    return count; 
} 

und hier deutlich zu sehen, dass der Wert von count nicht geändert wird.

+0

Danke für Ihre Erklärung. Aber welche Änderungen empfehlen Sie mir in meinem obigen Code? –

+0

Aber op sagte, er kann die Toast-Nachricht innerhalb dieser Methode sehen, so dass der Code ausgeführt wird. – user1301428

+0

Ja, es kommt ins "if()". –

Verwandte Themen