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

Firebase Realtime Database使用equalTo传Long值查询报错如何解决?

问题解决方法

报错原因

Firebase Realtime Database 的 equalTo() 方法仅开放了 Boolean、Double、可空 String 三种参数类型的重载,不支持直接传入 Long 类型参数,因此会触发类型不匹配的编译报错。
setValue() 方法可以正常写入 Long 类型,是因为该方法的入参类型为 Any?,SDK 会自动将 Kotlin 的 Long 类型映射为 Firebase 支持的数值类型存储,不存在参数类型限制。

解决方法

方案1:直接转Double适配(适合条码数值不超过16位的场景)

如果你的条码数值长度小于16位,转Double不会出现精度丢失,直接将查询参数转为Double即可,修改后的代码如下:

database.getReference(verifiedProductsDb.dbPartVerifiedProducts)
    .orderByChild(verifiedProductsDb.barcode)
    .equalTo(b.toLong().toDouble())
    .get()
    .addOnCompleteListener {
        // 原有业务逻辑
    }

方案2:统一用String类型存储查询(更推荐)

条码本身不需要做数值运算,且如果条码长度超过16位,转Double会出现精度丢失问题,建议你将条码字段统一改为String类型存储、查询:

  1. 修改写入逻辑,存储条码的字符串形式:
// 写入条码时调用toString()转成字符串
reference.child(verifiedProductsDb.barcode).setValue(barcodeValue.toString())
  1. 修改查询逻辑,直接传入字符串类型的条码:
database.getReference(verifiedProductsDb.dbPartVerifiedProducts)
    .orderByChild(verifiedProductsDb.barcode)
    .equalTo(b.toString())
    .get()
    .addOnCompleteListener {
        // 原有业务逻辑
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:54:05