我想创建一个像
"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服务器上的时间并生成要编写的路径。