You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ServerValue.TIMESTAMP设置Firebase值时遇无效优先级错误求助

解决Firebase ServerValue.TIMESTAMP设置错误的问题

你遇到的问题是因为对Firebase setValue方法的重载使用有误,导致把时间戳的Map当成了节点优先级传入,触发了无效优先级的错误。

问题根源

你最后一行代码:

beerExpiration.child(beer.id).setValue("timestamp", serverTimeStamp)

这里调用的是Firebase的setValue(value: Any?, priority: Any?)重载方法——第二个参数被识别为节点优先级,而Firebase规定优先级只能是字符串、双精度浮点数、ServerValue或者Null,你传入的serverTimeStamp是一个Map,显然不符合要求,所以报错。

正确的两种实现方式

方式1:直接用Map作为setValue的参数

如果要在beerExpiration/beer/{beerId}节点下创建timestamp字段并赋值为服务器时间戳,直接把你的时间戳Map传给setValue即可:

val serverTimeStamp = mapOf("timestamp" to ServerValue.TIMESTAMP)
beerExpiration.child(beer.id).setValue(serverTimeStamp)

执行后,目标节点下会生成一个timestamp字段,值为Firebase服务器的当前时间戳。

方式2:用updateChildren更新指定字段

如果目标节点已经存在其他数据,只想新增或更新timestamp字段,推荐使用updateChildren,避免覆盖节点下的其他数据:

beerExpiration.child(beer.id).updateChildren(mapOf("timestamp" to ServerValue.TIMESTAMP))

完整修正后的代码示例

val userRef = database.reference.child(userId).child("cache")
val beerRef = userRef.child("beers")
beerRef.child(beer.id).setValue(beer)
val beerExpiration = userRef.child("expiration/beer")
// 用updateChildren直接设置timestamp字段
beerExpiration.child(beer.id).updateChildren(mapOf("timestamp" to ServerValue.TIMESTAMP))

这样就能正确设置服务器时间戳,不会再出现路径优先级无效的错误了。

内容的提问来源于stack exchange,提问作者alexpfx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:10:36