我想创建一个像这样的结构
"child1/1510612788766/": key: "quantity", value: 10
"child1/1510612788767/": key: "quantity", value: 4
"child1/1510612788768/": key: "quantity", value: 1
"child2/1510612788710/": key: "quantity", value: 6
"child2/1510612788756/": key: "quantity", value: 8
但是当我尝试时:
ref.child("child1").child(ServerValue.TIMESTAMP);
第二个子调用出现编译错误:
Error:(59, 52) error: incompatible types: Map<String,String> cannot be converted to String
我知道这个错误是因为该方法需要 Map<String, Object>
map 而不是时间戳 map 。
但是我怎样才能以这种方式存储 ServerValue 并为其设置一个值呢?
最佳答案
这不是 ServerValue.TIMESTAMP
的使用方式。
child()
接受一个字符串,其中包含您要访问的子项的名称。这是数据库中节点的名称。即使它的格式为数字,也只能作为字符串引用。
ServerValue.TIMESTAMP
是一个特殊的(映射)值,您可以在添加或更新节点内的子数据时插入服务器当前时间的位置。 不能用作节点本身的名称。
如果您想创建基于某个时间的数据库位置,则需要在开始访问它之前知道该时间。 ServerValue.TIMESTAMP
不会帮助您,因为它仅在服务器上生成。
如果你想添加按时间排序的数据,你应该将数据push()到数据库中。 Push id是基于时间的,但这是客户端的时间感,而不是服务端的时间感。
如果您确实需要在节点名称中使用服务器的时间感,则应该使用 Cloud Functions for Firebase测量 Google 服务器上的时间并生成您想要写入的路径。
关于java - 如何使用 Firebase 的 ServerValue.TIMESTAMP 作为子项并为其设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47274974/