【问题标题】:Firebase append complete list at a timeFirebase 一次追加完整列表
【发布时间】:2018-07-31 17:09:50
【问题描述】:

我已经浏览了网络,并通过在 snapshot.getchildren() 上进行迭代来通过多种方式将整个列表附加到 firebase 数据库中。 基本上以下功能就是我所说的。

private void func (DatabaseReference ref, DataSnapshot snapshot) {
    for (DataSnapshot childSnapShot : snapshot.getChildren()) {

    ref.child(childSnapShot.getKey()).setValueAsync(childSnapShot.getValue());
    //or
    ref.push().setValueAsync(childSnapShot.getValue());
    }
}

但我想知道一种方法,这样我就可以一次添加整个快照子数据而无需任何迭代。

ref.push().setValueAsync(snapshot.value());

上述语句一次性追加数据,但在父层创建了一个额外的键。 然而 ref.setValueAsync(snapshot.value()); 覆盖整个 firebase 而不是追加。

是否可以一次性追加整个列表?

【问题讨论】:

    标签: firebase firebase-realtime-database kotlin append


    【解决方案1】:

    是的,你可以。您可以获取snapshot 对象,将其转换为HashMap 对象,然后直接将其设置在引用上,而无需像这样迭代:

    private void func (DatabaseReference ref, DataSnapshot snapshot) {
        val map : HashMap<String, Any> = snapshot.getValue() as HashMap<String, Any>;
        ref.setValue(map);
    }
    

    【讨论】:

    • 嗨,p0 是什么?是快照吗?其次不是 ref.setValue(map);与 ref.setValueAsync(snapshot.value()); 相同这将覆盖完整的firebase而不是追加。
    • 对不起,我的错误。应该是snapshot 而不是 p0。 Yes 是一个snapshot 对象。是的,它会设置值,但您不再需要遍历整个 DataSnapshot 对象。这不是你想要的吗?
    • 其实我想要的是追加这个快照的值到当前firebase的现有数据中。仅使用此快照的值设置 覆盖 firebase,我最终会丢失现有的 firebase 数据。
    • 我明白了。在这种情况下,您应该使用updateChildren() 函数而不是setValue()。是这样的吗?
    猜你喜欢
    • 2021-11-22
    • 2019-08-20
    • 2012-10-06
    • 2017-03-14
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多