为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 Firebase 获取特定的子值?

如何从 Firebase 获取特定的子值?

噜噜哒 2021-09-29 17:25:22
我只想获取player1Name并分配给 String player1Name。但是我null从下面的代码中得到了,请帮忙!Firebase 基本设置:100% 在这部分工作UserId = FirebaseAuth.getInstance().getCurrentUser().getUid();DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();DatabaseReference gameInfoRef = rootRef.child("user").child(UserId).child("gameInfo");gameKey = "LMr4xql36nPZFvyX5n9";ValueEventListener:gameInfoRef.child(gameKey).addValueEventListener(new ValueEventListener() {    @Override    public void onDataChange(DataSnapshot dataSnapshot) {        TextView tv_player1Name = findViewById(R.id.tv_player1Name);        for (DataSnapshot ds : dataSnapshot.getChildren()) {            Game game = ds.child(gameKey).getValue(Game.class);            player1Name = ds.child("player1Name").getValue(String.class);        }     System.out.println(ds.child(gameKey).getValue() +"  =All Data");     }});System.out.println:09-20 21:38:14.980 4274-4274/viwil.mahjongcal I/System.out: null    All Data这也不起作用:player1Name = game.getPlayer1Name()错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String viwil.mahjongcal.Game.getPlayer2Name()”当我改变这条线时gameInfoRef.child(gameKey).addValueEventListener(new ValueEventListener() {到gameInfoRef.addValueEventListener(new ValueEventListener() {System.out.println将打印所有数据(包括我想要的字符串)而不管gameKey,但我想要player1Name在我指定的里面child("gameKey"),请帮忙。
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

push()方法生成的 ID以-(减号)开头。因此,要解决此问题,请更改以下代码行:

gameKey = "LMr4xql36nPZFvyX5n9";

gameKey = "-LMr4xql36nPZFvyX5n9";
//         ^

当您使用对该特定 id 的直接引用时,无需DataSnapshot使用getChildren()方法遍历对象,您只需从其中获取值即可。因此,删除 for 循环并仅使用以下代码行:

Game game = dataSnapshot.getValue(Game.class);Log.d(TAG, game.getPlayer1Name());

您的 logcat 中的结果将是:

testttggg


查看完整回答
反对 回复 2021-09-29
  • 1 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信