java - 如何使用 Firebase 的 ServerValue.TIMESTAMP 作为子项并为其设置值

标签 java android firebase firebase-realtime-database

我想创建一个像这样的结构

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

相关文章:

ios - 从 Firebase Swift 解析数据 JSON

java - 如何使用 RxJava 2 的 CompositeDisposable?

java - J2ME BlackBerry 从数组类创建实例

java - 检门形式ajax

java - ExpandableList 示例未正确显示

java - 无法解析符号 'default_web_client_id' 错误,但应用程序运行成功

java - 为什么我不能在我的 IntelliJ 中下载 OpenJDK-17?

android - Activity onResume()

android - 如何在 Android Instrumentation 测试中强制改变方向?

ios - 当 firebase 数据库中的值发生变化时创建推送通知