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

从Firebase获取数据至自定义类时抛出DatabaseException异常求助

解决Firebase DatabaseException: Long转CodeDescMast失败的问题

这个错误我之前也碰到过,本质是Firebase尝试把数据库里的一个Long类型值映射到你的CodeDescMast对象时类型不匹配,大概率是你的读取路径不对,或者数据库里对应节点的数据结构和POJO不匹配。下面给你一步步排查和解决的方法:

  • 先确认读取的数据库路径是否正确
    很多时候出错是因为误读了某个子字段的数值,而不是整个CodeDescMast对象的节点。比如你本来要读/codeDescs/{itemId}这个完整对象节点,但不小心写成了/codeDescs/{itemId}/id(这个节点是Long类型),自然转不成对象。先核对你的dSnpSht对应的数据库路径,确保指向的是完整的CodeDescMast对象节点。

  • 打印调试当前节点的实际数据
    在报错的代码前加一段调试代码,看看你拿到的到底是什么:

    Object rawValue = dSnpSht.getValue();
    Log.d("FirebaseDebug", "当前节点值类型: " + rawValue.getClass().getName() + ", 内容: " + rawValue);
    

    运行后看日志,如果输出是java.lang.Long,那说明你确实读错了路径,或者数据库里这个节点存的就是个数字,不是对象。

  • 核对数据库数据结构和POJO的匹配度

    1. 检查Firebase控制台里对应节点的数据:确保它是一个键值对对象,而不是单个数值。比如正确的结构应该是像这样的键值对:
      {
        "code": "CODE001",
        "desc": "测试描述",
        "id": 1
      }
      
      如果这个节点下直接是一个数字(比如1),那就是数据存错了,需要在控制台修正。
    2. 确认POJO字段和数据库键名完全一致(大小写敏感):比如数据库里是code,POJO里不能写成Code或者CODE;getter/setter要符合JavaBean规范,比如字段id的getter是getId(),setter是setId(int id),不能乱命名。
  • 检查POJO的int字段处理
    Firebase会把Java的int存储为Long类型,但它本身支持自动转换,只要你的POJO字段是int且getter/setter正确,这个不会导致报错。但如果数据库里某个字段是Long,而你POJO里对应的是String,那会触发类型错误,这点也要注意排查。

  • 修复错误的数据库数据
    如果是之前存数据时误操作,把Long值存到了本该放CodeDescMast对象的节点下,直接在Firebase控制台删除这个错误节点,重新存入正确的对象结构即可。

按照上面的步骤排查,基本就能定位到问题所在了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:35:17