Firebase updateChildren() 使用对象而不是使用 Android SDK 的 JSON 原语
Firebase updateChildren() with objects rather than JSON primitives using Android SDK
我可以像使用 setValue()
一样使用任意(Firebase 友好)对象的地图来使用 updateChildren()
吗?以下工作正常:
public void addReview(FbReview review, AddCallback callback) {
Firebase root = mDataRoot.child(REVIEWS_ROOT).child(review.getReviewId());
root.setValue(review, newAddListener(review, callback));
}
其中 FbReview 是一个简单的数据保存器 class,具有空构造函数和用于自动数据结构的 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: Failed to parse node with class ... FbReview
如果我尝试上面的 updateChildren()
代码但传递一个字符串(review.getSubject()
说)而不是一个对象,它工作正常表明对象解析不适用于 updateChildren()
。
这是正确的吗?
updateChildren()
方法目前不接受任意 Java 对象。它只接受原始类型或原始类型的映射。
幸运的是,您可以使用 Jackson ObjectMapper:
轻松地将 Java 对象转换为相应的地图
Map<String, Object> userMap = new ObjectMapper().convertValue(user, Map.class);
然后您可以将值映射放入要传递给 updateChildren() 的值中:
Map<String, Object> updatedReview = new HashMap<String, Object>();
updates.put(REVIEWS_ROOT + "/" + review.getReviewId(), updatedReview);
mDataRoot.updateChildren(updates, newAddListener(review, callback));
也看到这个答案:
我可以像使用 setValue()
一样使用任意(Firebase 友好)对象的地图来使用 updateChildren()
吗?以下工作正常:
public void addReview(FbReview review, AddCallback callback) {
Firebase root = mDataRoot.child(REVIEWS_ROOT).child(review.getReviewId());
root.setValue(review, newAddListener(review, callback));
}
其中 FbReview 是一个简单的数据保存器 class,具有空构造函数和用于自动数据结构的 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: Failed to parse node with class ... FbReview
如果我尝试上面的 updateChildren()
代码但传递一个字符串(review.getSubject()
说)而不是一个对象,它工作正常表明对象解析不适用于 updateChildren()
。
这是正确的吗?
updateChildren()
方法目前不接受任意 Java 对象。它只接受原始类型或原始类型的映射。
幸运的是,您可以使用 Jackson ObjectMapper:
轻松地将 Java 对象转换为相应的地图Map<String, Object> userMap = new ObjectMapper().convertValue(user, Map.class);
然后您可以将值映射放入要传递给 updateChildren() 的值中:
Map<String, Object> updatedReview = new HashMap<String, Object>();
updates.put(REVIEWS_ROOT + "/" + review.getReviewId(), updatedReview);
mDataRoot.updateChildren(updates, newAddListener(review, callback));
也看到这个答案: