Das Problem ist DataSnapShot
ist fehlt ein Argument Konstruktor, so dass Sie es nicht direkt so verwenden können.
Verwenden Sie stattdessen eine andere Modellklasse.
So:
Erstellen Sie Ihr eigenes Modell FriendlyMessage
genannt:
public class FriendlyMessage {
private String text;
private String name;
// Created constructor with no Arguments
public FriendlyMessage() {
}
public FriendlyMessage(String text, String name) {
this.text = text;
this.name = name;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Wichtigste, was wir Konstruktor ohne Argumente erstellt haben, die in DataSnapShot
fehlte
HINWEIS: Die obige Modellklasse ist nur ein Beispiel für Sie, da Sie in Firebase neu sind. Sie können Ihre eigene Modellklasse mit Ihren eigenen Parametern und allen haben.
Die Verwendung es so für Ihre Firebase Recyclerview:
FirebaseRecyclerAdapter mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage, MyHolder>(
FriendlyMessage.class,
R.layout.row_slots,
MyHolder.class,
databaseReference.child("slots").child(uid).child(dayOfWeek).child("time")) {
@Override
protected void populateViewHolder(MyHolder viewHolder, FriendlyMessage friendlyMessage, int position)
{
}
};
EDIT:
Es ist auch egal, wie Sie die Daten auf Datenbank drängen. Tun Sie es direkt mit Ihrer Modellklasse.
Zum Beispiel für obiges Modell es so schieben FriendlyMessage
:
FriendlyMessage friendlyMessage = new FriendlyMessage("message", "Username");
databaseReference.child(MESSAGES_CHILD).push().setValue(friendlyMessage);
Hier Ihr child()
wird etwas anders sein als meine Implementierung es ist nur ein Beispiel.
für das Hören eines bestimmten DataSnapShot:
databaseReference.child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
//The PUSH ID OP WANTED
System.out.println("Push Id ---"+postSnapshot.getKey());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
})
die oben Zuhörer zu erklären. Es wird Ihnen das DataSnapShot
Objekt für jeden Benutzer geben, der in Ihr Kind "Benutzer" fällt. Sie können Push ID von getKey()
Methode zugreifen.
Sie müssen Ihre eigene Modellklasse definieren. – Piyush
Ja, ich habe das gemacht. Aber mit meiner eigenen Modellklasse kann ich keinen Schlüssel für jeden Knoten bekommen, wie wir es von einem Snapshot erhalten. Deshalb versuche ich mit Snapshot. Gibt es eine Möglichkeit, wie wir den Schlüssel des Knotens mit unserer eigenen Klasse bekommen können (ohne Schlüssel als Kind für diesen Knoten zu speichern) – Dhaval
Ich denke, es gibt ein Missverständnis. Nehmen wir an, es gibt einen Knoten Benutzer. Jedes Mal, wenn ich einen neuen Benutzer hinzufüge, benutze ich die Methode push().Jetzt hat der Benutzer zwei Kindernamen und eine E-Mail-Adresse. Zum Abrufen habe ich also eine User.class mit zwei Feldern name und email erstellt. Alles funktioniert gut. Was aber, wenn ich die Push-ID dieses Benutzers abrufen möchte. Mit Snapshot können wir das bekommen, aber mit User.class können wir das nicht bekommen, weil kein Kind im Benutzerknoten push id enthält. – Dhaval