我只想获取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
添加回答
举报
0/150
提交
取消