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

标签 java android firebase firebase-realtime-database

我只想得到player1Name并分配给字符串 player1Name 。但我得到 null从下面的代码,请帮忙!

Firebase data tree:

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: Attempt to invoke virtual method 'java.lang.String viwil.mahjongcal.Game.getPlayer2Name()' on a null object reference

当我更改此行时

gameInfoRef.child(gameKey).addValueEventListener(new ValueEventListener() {

gameInfoRef.addValueEventListener(new ValueEventListener() {

System.out.println将打印所有数据(包括我想要的字符串),无论gameKey如何,但我想要player1Name在我指定的child("gameKey")里面,请帮忙。

最佳答案

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

gameKey = "LMr4xql36nPZFvyX5n9";

gameKey = "-LMr4xql36nPZFvyX5n9";
//         ^

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

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

logcat 中的结果将是:

testttggg

关于java - 如何从 Firebase 获取特定的子值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52426513/

相关文章:

swift - 从 Xcode 9 上传到应用商店/iTunes 连接的问题

java - 在 jframe 中读取已删除的面板

java - 解密 TLS https 数据流量

java - Retrofit - 并行 HTTP 请求

android - Recyclerview 动态部分不使用任何第三库

Android - findViewById() - 将参数传递给构造函数

java - Android 应用程序在模拟器上运行良好,但在真实设备上运行不佳

java - 如何在 Java 中使用父目录中的类?

ios - 使用 Swift 从 for 循环中查找 Firebase 键的 nil

ios - Xcode - 无法从服务器检索身份验证 token