我可以使用 updateChildren()
使用任意(Firebase友好)对象的 Map ,就像我可以使用 setValue()
一样吗?以下工作正常:
public void addReview(FbReview review, AddCallback callback) {
Firebase root = mDataRoot.child(REVIEWS_ROOT).child(review.getReviewId());
root.setValue(review, newAddListener(review, callback));
}
其中FbReview是一个简单的数据持有者类,带有一个空构造函数,并带有用于自动数据结构化的getter(使用 setValue()
中的对象显示在Firebase documentation for setValue()中)
但是,如果我尝试从网页上等效的 updateChildren()
后续示例:
@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));
}
我收到一个错误,表明我定义的FbReview对象无法解析:
FirebaseException:无法使用类... FbReview解析节点
如果我尝试上面的 updateChildren()
代码,但传递一个字符串( review.getSubject()
说)而不是一个对象,它工作得很好,表明对象解析不适用于 updateChildren()
.
它是否正确?
1 回答
updateChildren()
方法当前不接受任意Java对象 . 它只接受原始类型或原始类型的映射 .幸运的是,您可以使用Jackson ObjectMapper轻松地将Java对象转换为相应的 Map :
然后,您可以将值映射放入您传递给updateChildren()的值中:
也看到这个答案:Android Firebase 2.4 IllegalStateException using new ref.updateChildren()