【问题标题】:Firebase updateChildren() with objects rather than JSON primitives using Android SDKFirebase updateChildren() 使用对象而不是使用 Android SDK 的 JSON 原语
【发布时间】:2016-07-31 13:50:28
【问题描述】:

我能否像使用 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:无法解析具有类 ... FbReview 的节点

如果我尝试上面的updateChildren() 代码但传递一个字符串(review.getSubject() 说)而不是一个对象,它可以正常工作,这表明对象解析不适用于updateChildren()

这对吗?

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    updateChildren() 方法目前不接受任意 Java 对象。它只接受原始类型或原始类型的 Map。

    幸运的是,您可以使用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()

    【讨论】:

    • 非常感谢您的快速响应!顺便说一句,为什么不重载 updateChildren() 以接受对象并将 ObjectMapper 作为第一行?
    • 您对 Google 提供的用于 Firebase 9.x 的映射器有更新的建议吗?我相信他们不再使用杰克逊
    • 从 SD 9.6 版开始,您可以将 POJO 传递给 updateChildren()。但如果你愿意,你也可以自己使用 Jackson。见stackoverflow.com/questions/37547399/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多