我知道有很多关于 Firebase Datasnapshot 的问题,但我仍然对我的疑问没有澄清。事情是这样的
我在 Firebase 实时数据库中有这样的数据结构,
如果我在上面的参考中有一个100kb 的文件, val ref = FirebaseDatabase.getInstance().getReference("Groups")
如果我调用` ref.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(p0: DataSnapshot) {
// access getvalue here
}
})
`
我得到了参考中数据的快照作为 p0。
问题 1此特定快照是否包含参考中的所有可用数据(此下载的快照大小是否为100kb?)。如果我在 onDataChange 的第一行切断互联网,我是否可以访问 datasnapshot 中的所有数据,或者只有当我p0.getValue
在 onDataChange 上调用命令时才会下载数据,datasnapshot 就像数据引用一样?
问题2
在我的代码中,我在“组”上放置了一个 ValueEventListener,因此如果 person2 活动中发生单个更改(添加新活动或修改现有数据),我将下载“组”中的全部数据,我想避免随着组变大而消耗更多数据。修改person2数据或添加新活动时,如何有效地仅从person2获取数据。我尝试将子事件侦听器添加到“组”,其行为与 ValueEventListener 相同。我无法为每个人添加侦听器,因为人数未知,而且它可以是更大的数字,我不想在我的代码中添加那么多侦听器。我的代码已经在生产中,所以我什至无法更改数据库结构。
是的,当您在回调中收到快照时,快照将包含内存中的所有内容。您甚至根本不需要进入快照。
使用 ValueEventListener,如果在附加侦听器时快照下的任何内容发生更改,则只会传输更改。对于子项的每次更改,不会完全下载整个快照。但是,您必须编写代码来准确确定快照中的更改内容。这可能很困难,因为您必须将之前快照和新快照中的所有子值相互比较。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句