我想创建一个像

"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。

但是,我该如何存储ServerValue并为其设置一个值?

最佳答案

这不是ServerValue.TIMESTAMP应该被使用的方式。

child()接受一个String,其中包含您要访问的孩子的名字。这是数据库中节点的名称。即使将其格式化为数字,也只能将其引用为字符串。

ServerValue.TIMESTAMP是一个特殊的(Map)值,可用于在节点内添加或更新子数据时插入服务器当前时间的位置。它不能用作节点本身的名称。

如果要基于某个时间创建数据库的位置,则需要在开始访问数据库之前知道该时间。 ServerValue.TIMESTAMP不会帮助您,因为它是服务器上唯一生成的。

如果要按时间添加数据,则应将数据push()放入数据库中。推送ID基于时间,但这是客户端的时间感,而不是服务器的时间感。

如果您确实需要以节点名称使用服务器的时间感,则应该使用Cloud Functions for Firebase来度量Google服务器上的时间并生成要编写的路径。

10-06 01:20