Firebase-Daten werden abgerufen, indem ein asynchroner Listener an eine FirebaseDatabase-Referenz angehängt wird. Der Listener wird einmalig für den Anfangszustand der Daten und immer dann, wenn sich die Daten ändern, ausgelöst.
private DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
Um einen Wert Ereignis-Listener, verwenden, um die addValueEventListener() oder addListenerForSingleValueEvent() Methode hinzuzufügen. Verwenden Sie die addChildEventListener() -Methode, um einen untergeordneten Ereignis-Listener hinzuzufügen.
Mit der onDataChange() -Methode können Sie einen statischen Snapshot des Inhalts eines bestimmten Pfads lesen, wie er zum Zeitpunkt des Ereignisses vorhanden war. Diese Methode wird einmal ausgelöst, wenn der Listener angeschlossen ist, und jedes Mal, wenn sich die Daten, einschließlich der untergeordneten, ändern. Dem Ereignisrückruf wird ein Snapshot mit allen Daten an diesem Speicherort einschließlich untergeordneter Daten übergeben. Wenn keine Daten vorhanden sind, ist der zurückgegebene Snapshot null.
Beispiel: -
ValueEventListener postListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Post object and use the values to update the UI
Post post = dataSnapshot.getValue(Post.class);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// ...
}
};
mPostReference.addValueEventListener(postListener);
Kinder Ereignisse als Reaktion auf bestimmte Vorgänge ausgelöst werden, die auf die Kinder eines Knotens aus einer Operation passieren wie ein neues Kind aufgenommen durch die push() -Methode oder ein Kind zu sein aktualisiert über die updateChildren() -Methode. Jede dieser Komponenten kann nützlich sein, um Änderungen an einem bestimmten Knoten in einer Datenbank zu überwachen.
Beispiel: -
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());
// A new comment has been added, add it to the displayed list
Comment comment = dataSnapshot.getValue(Comment.class);
// ...
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
Log.d(TAG, "onChildChanged:" + dataSnapshot.getKey());
// A comment has changed, use the key to determine if we are displaying this
// comment and if so displayed the changed comment.
Comment newComment = dataSnapshot.getValue(Comment.class);
String commentKey = dataSnapshot.getKey();
// ...
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Log.d(TAG, "onChildRemoved:" + dataSnapshot.getKey());
// A comment has changed, use the key to determine if we are displaying this
// comment and if so remove it.
String commentKey = dataSnapshot.getKey();
// ...
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
Log.d(TAG, "onChildMoved:" + dataSnapshot.getKey());
// A comment has changed position, use the key to determine if we are
// displaying this comment and if so move it.
Comment movedComment = dataSnapshot.getValue(Comment.class);
String commentKey = dataSnapshot.getKey();
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "postComments:onCancelled", databaseError.toException());
Toast.makeText(mContext, "Failed to load comments.",
Toast.LENGTH_SHORT).show();
}
};
ref.addChildEventListener(childEventListener);
In einigen Fällen können Sie einen Rückruf einmal aufgerufen werden soll kann und dann sofort entfernt, wenn beispielsweise ein UI-Element zu initialisieren, die Sie nicht erwarten, zu ändern. Sie können die Methode addListenerForSingleValueEvent() verwenden, um dieses Szenario zu vereinfachen: Sie wird einmal ausgelöst und dann nicht erneut ausgelöst.
Dies ist nützlich für Daten, die nur einmal geladen werden müssen und von denen nicht erwartet wird, dass sie sich häufig ändern oder aktiv überwacht werden müssen.Zum Beispiel
Beispiel: -
final String userId = getUid();
mDatabase.child("users").child(userId).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get user value
User user = dataSnapshot.getValue(User.class);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "getUser:onCancelled", databaseError.toException());
}
});
den Code zeigen, können wir Ihnen nicht helfen, ohne es –
@DimaRostopira habe ich den Code. – Michal