猿问

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

我只想获取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"),请帮忙。


噜噜哒
浏览 183回答 1
1回答

万千封印

该push()方法生成的 ID以-(减号)开头。因此,要解决此问题,请更改以下代码行:gameKey = "LMr4xql36nPZFvyX5n9";到gameKey = "-LMr4xql36nPZFvyX5n9"; //         ^当您使用对该特定 id 的直接引用时,无需DataSnapshot使用getChildren()方法遍历对象,您只需从其中获取值即可。因此,删除 for 循环并仅使用以下代码行:Game game = dataSnapshot.getValue(Game.class);Log.d(TAG, game.getPlayer1Name());您的 logcat 中的结果将是:testttggg
随时随地看视频慕课网APP

相关分类

Java
我要回答