【问题标题】:Firebase Realtime Database add to list in MutableDataFirebase 实时数据库添加到 MutableData 中的列表
【发布时间】:2017-01-23 09:59:11
【问题描述】:

如何使用 MutableData 在 Firebase 实时数据库事务中添加列表?

在正常的非事务类型更新中,我可以简单地使用

DatabaseReference refDatabase = ...    
refDatabase.push().setValue(value);

但是对于 MutableData,不存在这样的 push() 方法。如何添加到列表并获取唯一键?

我正在寻找类似的东西

    public Transaction.Result doTransaction(MutableData mutableData) {
      mutableData.push().setValue(value);
       ...

但这并不存在。

【问题讨论】:

  • 调用push()是纯客户端操作。您可以调用 refDatabase.push().getKey() 并从代码中的任何位置获取唯一密钥。如果您在进行交易时遇到问题,请显示minimal code that reproduces that problem
  • 感谢@Frank van Puffelen,它解决了独特的关键问题,但它没有显示如何使用 MutableData 添加到列表中,因为我想我已经清楚地问过了。与其说是提供最少的代码来重现问题,不如说是表明我需要的方法似乎不存在。

标签: android firebase firebase-realtime-database


【解决方案1】:

我想我理解你的问题和评论的重点:很高兴知道push() 的缺失是 API 设计人员的疏忽,还是故意省略以防止用户做不安全的事情或以其他方式“坏”。

有一个解决方法,对吗?您知道运行事务的引用。可变数据是该参考位置的值。你不能把引用变量设为包字段,或者final类变量,然后在回调中使用它来调用push()吗?这很难看,但我认为应该可以。

我还猜测push()MutableData 省略是有原因的。 documentation for doTransaction() 声明:

这个方法将被调用,可能多次,当前 这个位置的数据。它负责检查该数据和 返回一个 Transaction.Result 指定所需的新数据 在该位置或该事务应中止。

由于同一事务可能会重复调用此方法, 非常小心可能由此引发的任何副作用 方法。

也许生成键并向列表添加元素不是您想要做的事情,因为它可能会发生多次。

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 2021-10-04
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2017-02-10
    • 2019-03-14
    • 1970-01-01
    • 2020-10-25
    相关资源
    最近更新 更多