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

Android Studio环境下使用Java从Firebase获取bet集合数据的问题

解决方案

核心错误原因

你当前混用了两个完全独立的Firebase数据库服务:

  • 你之前能正常读取User字段的代码用的是 Firebase Realtime Database
  • 你尝试写的读取bet的代码用的是 Cloud Firestore
    两个服务的数据不互通,这是代码执行失败的根本原因。

实现步骤

你已经适配了Realtime Database的序列化逻辑,直接基于现有逻辑扩展即可:

1. 更新User类,增加bet字段映射

bet节点是键为0-36数字字符串、值为对应内容的Map结构,直接在现有User类中新增对应字段即可:

public class User {
    // 保留你原有的字段
    public String full_name;
    public String email;
    public String password;
    public String bet_display;
    // 新增bet字段
    public Map<String, String> bet;

    // 必须保留空构造方法供Firebase序列化使用
    public User() {}

    // 其余原有构造方法、逻辑不变
}

2. 读取对应开奖号码的bet值

在现有onDataChange回调中直接从User实例取对应值即可,示例代码:

@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
    User user1 = snapshot.getValue(User.class);
    if(user1 != null){
        user_submit.setText(user1.bet_display);
        // 读取bet值,winNumber替换为你实际获取到的开奖号码(0-36)
        String winNumber = "18";
        if(user1.bet != null && user1.bet.containsKey(winNumber)){
            String targetBetValue = user1.bet.get(winNumber);
            // 此处处理拿到的bet字符串即可
        }
    }
}

可选:不修改User类的读取方式

如果你不想修改现有User类,也可以直接从DataSnapshot中读取bet子节点:

@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
    User user1 = snapshot.getValue(User.class);
    if(user1 != null){
        user_submit.setText(user1.bet_display);
        // 直接读取bet子节点
        DataSnapshot betSnapshot = snapshot.child("bet");
        String winNumber = "18"; // 替换为实际开奖号
        if(betSnapshot.hasChild(winNumber)){
            String targetBetValue = betSnapshot.child(winNumber).getValue(String.class);
            // 处理拿到的结果
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:54:05