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

Firebase数据库数据获取异常:bikingTime显示为0的问题排查

解决Firebase实时数据库获取bikingTime始终为0的问题

咱们一步步来排查你遇到的问题,毕竟从Firebase拿数据时出现默认值,大概率是路径、实体类、异步逻辑或者权限这几个环节出了问题:

一、先确认数据库引用路径没写错

首先得保证你的引用路径和Firebase控制台里的节点结构完全对应,比如正确的引用写法应该是这样:

// 获取到目标节点的引用
DatabaseReference targetRef = database.getReference("XqU1a6jrvKSLf4ulhI3LkOhChE92").child("ahmad");

要是路径里的节点名(比如ahmad或者父节点ID)写错了,或者大小写不匹配,Firebase找不到对应数据,就会返回默认值0。

二、检查你的child实体类配置

Firebase要把数据库数据映射到你的对象,实体类得满足几个要求:

  1. 必须有无参构造函数(Firebase反序列化需要)
  2. 字段名和数据库里的键名完全一致(或者用@PropertyName注解指定)
  3. 字段类型要匹配(比如数据库里bikingTime是数字,你的字段就得是int/long,不能是String)

举个正确的实体类例子:

public class Child {
    private int bikingTime;

    // 必须保留无参构造
    public Child() {}

    public int getBikingTime() {
        return bikingTime;
    }

    // 如果字段名和数据库键名一致,注解可以不加,但加上更稳妥
    @PropertyName("bikingTime")
    public void setBikingTime(int bikingTime) {
        this.bikingTime = bikingTime;
    }
}

要是没无参构造,Firebase没法创建对象,自然只能给你默认的0值。

三、别忽略Firebase的异步特性!

这是很多新手踩坑的点:Firebase读取数据是异步操作,你不能刚创建Child对象就直接拿bikingTime,这时候数据还没从服务器返回呢!

得用监听来等待数据加载完成,比如用addListenerForSingleValueEvent(只读取一次)或者addValueEventListener(实时监听变化):

// 先拿到你的TextView实例
TextView bikingTimeTv = findViewById(R.id.your_textview_id);

DatabaseReference targetRef = database.getReference("XqU1a6jrvKSLf4ulhI3LkOhChE92").child("ahmad");
targetRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // 先判断节点是否存在
        if (dataSnapshot.exists()) {
            Child myChild = dataSnapshot.getValue(Child.class);
            if (myChild != null) {
                // 数据加载完成,更新TextView
                bikingTimeTv.setText(String.valueOf(myChild.getBikingTime()));
            }
        } else {
            bikingTimeTv.setText("找不到对应数据");
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // 读取失败的情况,打印错误信息方便排查
        Log.e("FirebaseError", "读取数据失败: " + databaseError.getMessage());
        bikingTimeTv.setText("读取失败");
    }
});

四、检查数据库权限规则

默认情况下,Firebase实时数据库的规则是只允许认证过的用户读写。如果你的App还没做用户认证,或者规则设置成了read: false,那读取请求会被拒绝,也会返回默认值0。

开发阶段可以暂时把规则改成这样(上线后一定要改回安全规则!):

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

五、最后确认数据库里的数值真的不为0

去Firebase控制台的实时数据库页面,手动检查XqU1a6jrvKSLf4ulhI3LkOhChE92/ahmad下的bikingTime字段,是不是真的存了非0的数值——万一你存的时候就写错了,那读出来自然是0啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:26:19