Kann ich updateChildren()
mit einer Karte beliebiger (Firebase-freundlicher) Objekte auf die gleiche Weise wie setValue()
verwenden? Die folgenden Werke fein:Firebase updateChildren() mit Objekten anstelle von JSON-Primitiven mit Android SDK
public void addReview(FbReview review, AddCallback callback) {
Firebase root = mDataRoot.child(REVIEWS_ROOT).child(review.getReviewId());
root.setValue(review, newAddListener(review, callback));
}
wo FbReview ist eine einfache Dateninhaber Klasse mit einem leeren Konstruktor und mit Getter für die automatische Datenstrukturierung (unter Verwendung von Objekten in setValue()
im Firebase documentation for setValue()
jedoch angezeigt, wenn ich versuche, die Äquivalent updateChildren()
Follow-on Beispiel von der Webseite:
@Override
public void addReview(FbReview review, AddCallback callback) {
Map<String, Object> updates = new HashMap<>();
updates.put(REVIEWS_ROOT + "/" + review.getReviewId(), review);
mDataRoot.updateChildren(updates, newAddListener(review, callback));
}
ich einen Fehler, der die FbReview Objekt schlägt I definiert haben, können nicht analysiert werden:
FirebaseException: Fehler Knoten mit Klasse zu analysieren ... FbReview
Wenn ich versuche, die oben updateChildren()
Code, sondern ein String übergeben (review.getSubject()
sagen) eher als ein Objekt, um es funktioniert gut, das Objekt darauf hindeutet, doesn Parsen arbeite nicht mit updateChildren()
.
Ist das korrekt?
Großen dank für die schnelle Antwort! Übrigens, warum nicht updateChildren() überladen, um Objekte zu akzeptieren und theObjectMapper als erste Zeile zu setzen? – chdryra
Haben Sie eine aktualisierte Empfehlung, welcher Mapper für Firebase 9.x von Google verwendet werden soll? Ich glaube, sie verwenden nicht mehr Jackson –
Ab SD Version 9.6 können Sie ein POJO an 'updateChildren()' übergeben. Aber Sie können Jackson auch immer noch selbst benutzen, wenn Sie wollen. Siehe http://stackoverflow.com/questions/37547399/how-to-deserialise-a-subclass-in-firebase-using-getvaluesubclass-class/37548330#37548330 –