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
相关产品推荐
相关产品推荐

