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

从Firebase Firestore取数时遇‘Field 'dwell time'非java.lang.Number’错误

问题分析与修复方案:Firestore字段“dwell time”无法用getLong()读取的错误

可能的原因及对应修复方法:


1. 字段名不匹配

代码中使用的字段名和Firestore控制台中的字段名必须完全一致,包括空格、大小写。比如Firestore中是带空格的dwell time,代码里不能写成dwellTime或者dwell_time。

修复:
严格核对代码中的字段字符串:

// 确保字段名和Firestore中完全一致
Long dwellTime = document.getLong("dwell time");

2. Firestore中字段是浮点型(Double)而非整型(Long)

Firestore的数字类型包含整型和浮点型,如果该字段存储的是小数(比如2.5),直接用getLong()会触发类型不匹配错误——因为getLong()仅支持读取整型数字。

修复:
先读取为Number类型,再转换为Long;或者先读取为Double再转Long:

// 方法1:通过Number中转
Number dwellTimeNum = document.getNumber("dwell time");
Long dwellTime = dwellTimeNum != null ? dwellTimeNum.longValue() : null;

// 方法2:读取为Double后转换
Double dwellTimeDouble = document.getDouble("dwell time");
Long dwellTime = dwellTimeDouble != null ? dwellTimeDouble.longValue() : null;

3. 目标文档中字段缺失或为null

即使大部分文档的dwell time是数字类型,个别文档可能存在字段缺失或值为null的情况,调用getLong()时会抛出异常。

修复:
先检查字段是否存在且非null:

if (document.contains("dwell time")) {
    Number dwellTimeNum = document.getNumber("dwell time");
    if (dwellTimeNum != null) {
        Long dwellTime = dwellTimeNum.longValue();
        // 后续业务逻辑
    } else {
        // 处理字段为null的情况
    }
} else {
    // 处理字段不存在的情况
}

4. 字段实际为字符串类型(误判)

如果写入数据时错误地将数字以字符串形式存储(比如存了"123"而非123),Firestore控制台可能显示类似数字的内容,但实际类型是字符串,这也会触发该错误。

修复:
在Firestore控制台中确认字段类型:数字类型为蓝色标识,字符串为黑色。如果是字符串类型,需要修正写入逻辑,确保存储的是数字而非字符串,同时更新已有文档的字段类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:32:17