2017-01-22 5 views
2

Dies ist mein Code für das Lesen von Daten lesen Firebase:Kann nicht Firebase Datenbank

final String[] booknum = {"0"}; 
    databaseReference.child("All BID").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      booknum[0] =Long.toString(snapshot.getChildrenCount()); 
      Toast.makeText(getApplicationContext(), booknum[0],Toast.LENGTH_LONG).show(); 

     } 
     @Override public void onCancelled(DatabaseError databaseError) { 
      Log.w(TAG, "loadPost:onCancelled", databaseError.toException()); 
     } 
    }); 
    Toast.makeText(getApplicationContext(), booknum[0],Toast.LENGTH_LONG).show(); 

Wenn ich dies ausgeführt wird, der erste Toast (innen ValueEventListener) druckt die richtige Antwort (zB ‚8‘). Aber der Toast draußen druckt immer 0 egal was passiert.

Bitte Hilfe!

Antwort

0

Der ValueEventListener ist asynchron. Die Codezeilen innerhalb des Listeners, einschließlich der Zuweisung von booknum [0], werden nicht vor den außerhalb des Listeners geschriebenen Codezeilen ausgeführt. Wenn Sie für eine Operation auf den neuen Wert von booknum [0] angewiesen sind, sollten Sie diese Operation in onDataChange() verschieben, um sicherzustellen, dass sie den neuen Wert verwendet.

+0

Sorry, ich habe es versucht, aber ich kann es nicht beheben. Kennen Sie einen Weg, onDataChange() zu vermeiden? Ich brauche nur die Anzahl der Elemente, die sich in "All BIID" befinden. – theBrainyGeek

+0

Die Verwendung von onDataChange() ist der richtige Weg. Und Sie erhalten die Anzahl der Elemente in "All BID" in onDataChange(). Es druckt 8. –

+1

Ich verstehe das, aber das Problem ist, dass ich die Anzahl der Elemente bekomme, so dass ich einen eindeutigen Code generieren kann, bevor ich neue Daten einlege. Und die onDataChange() wird nicht ausgeführt, bis ich neue Daten schreibe. Deshalb wird in diesem Code zuerst die '0' von außen Toast gedruckt, dann werden die Daten hinzugefügt (mit eindeutigem Code 0) und dann druckt onDataChange() 8. Sorry, ich bin neu in der Datenbankverwaltung, deine Hilfe ist hoch geschätzt! – theBrainyGeek