android - Firebase updateChildren() 使用对象而不是使用 Android SDK 的 JSON 原语

标签 android firebase firebase-realtime-database

我可以像使用 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 是一个简单的数据存储类,具有空构造函数和用于自动数据结构的 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));

也请参阅此答案:Android Firebase 2.4 IllegalStateException using new ref.updateChildren()

关于android - Firebase updateChildren() 使用对象而不是使用 Android SDK 的 JSON 原语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36531102/

相关文章:

android - 我们应该在 Kotlin 中绑定(bind) android View 吗?

android - YUV_420_888(字节)格式

firebase - flutter 中 flutter_facebook_login 的问题

android - Android 应用程序被杀死时如何处理离线 firebase 数据库?

android - 适用于 Android 的 Xamarin 编译器变灰

java - 从正在运行的服务更新 Activity UI

github - 如何运行 firebase 示例

firebase - 如何更改 Firebase-ui 语言?

Firebase 客户端扇出性能

Firebase 存储 - 将图像上传到 Firebase 存储并在实时数据库中创建指向该图像的链接