如何使用MutableData添加到Firebase实时数据库事务中的列表?
在正常的非交易类型更新中,我可以简单地使用
DatabaseReference refDatabase = ...
refDatabase.push().setValue(value);
但是使用MutableData时,不存在这样的push()方法。如何添加到列表并获取唯一键?
我正在寻找像
这样的东西 public Transaction.Result doTransaction(MutableData mutableData) {
mutableData.push().setValue(value);
...
但这不存在。
答案 0 :(得分:1)
我想我理解你的问题和评论的意思:很高兴知道push()
的缺席是否是API设计师的疏忽,或者故意省略它以防止用户做某事不安全或其他“不好”。
有一种解决方法,对吗?您知道运行事务的引用。可变数据是该参考位置的值。你不能只是将引用变量作为包字段或final
类变量,并在回调中使用它来调用push()
吗?这很难看,但我觉得应该有用。
我还会猜测push()
因MutableData
而被忽略是有原因的。 documentation for doTransaction()州:
此方法将使用当前调用,可能多次 此位置的数据。它负责检查数据和 返回Transaction.Result,指定所需的新数据 在该位置或交易应该中止。
由于可以针对同一事务重复调用此方法, 要非常小心可能由此触发的任何副作用 方法
也许生成密钥并向列表添加元素不是您想要做的事情,因为它可能会多次出现。