我只想获取player1Name
并分配给字符串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")
,请帮忙。
答案 0 :(得分:3)
由push()
方法生成的ID以-
(减号)开头。因此,要解决此问题,请更改以下代码行:
gameKey = "LMr4xql36nPZFvyX5n9";
到
gameKey = "-LMr4xql36nPZFvyX5n9";
// ^
当您使用对特定ID的直接引用时,无需使用DataSnapshot
方法循环遍历getChildren()
对象,您只需从其中获取值即可。因此,删除该for循环并仅使用以下代码行:
Game game = dataSnapshot.getValue(Game.class);
Log.d(TAG, game.getPlayer1Name());
您的logcat中的结果将是:
testttggg