有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从Firebase数据库获取用户对象

因此,在我的应用程序中,我有一个游戏大厅,其中一个用户制作一个游戏,然后另一个用户加入游戏。当用户制作游戏时,它们作为user1存储在数据库中的适当节点中,当用户加入游戏时,它们作为user2保存在同一节点中。在这里,他们存储了自己的信息,如下所示

enter image description here

图片中的数据库信息是数据的大厅版本,每当第二个有效用户加入游戏时,我希望该数据库被删除(因为它是作为一个界面绘制的,我不希望其他用户加入完整的游戏),我希望它成为一个新的“活动游戏”数据库

我知道怎么做,但我想知道如何将user1user2作为用户对象移动到新数据库。我曾尝试将这些项作为用户对象创建回调,但我在这方面遇到了很多问题,因此我希望有另一种方法来实现这一点

现在,一旦节点中存在user2字段,则调用此创建游戏的方法:

private void createGame(String gameID) {
    FCGames.child(gameID).removeValue();
    FCGameMaker fc = new FCGameMaker(null, null, false, false, gameID);
    FlipCoinGames.child(gameID).setValue(fc);
    startActivity(new Intent(FlipCoinLobby.this, FlipCoin.class));
}

我已经为用户对象设置了null,因为我不知道如何将用户对象从旧数据库获取到这个新数据库中。这是我的FCGameMaker构造函数,因此您可以更好地理解这一点

public FCGameMaker(User player1, User player2, boolean gameStarted, boolean gameFinished, String gameId) {
    this.player1 = player1;
    this.player2 = player2;
    this.gameStarted = gameStarted;
    this.gameFinished = gameFinished;
}

下面是每当有人制作游戏时,我的user1字段是如何创建的

public void createLobbyGame () {
    final User user1 = new User(userName, 0, null, FirebaseAuth.getInstance().getUid(), gameID);
    AlertDialog.Builder fcDialog = new AlertDialog.Builder(this);

    fcDialog.setPositiveButton("Accept", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface fcDialog, int which) {
            double wager = Double.parseDouble(wagerText.getText().toString());
            //creating the game
            FCLobbyMaker gameMaker = new FCLobbyMaker(user1, null, wager, gameID,
                    false, false);

            FCGames.child(gameID).setValue(gameMaker);
        }
    });

}

最后一个方法还有很多,我只是删除了一些不必要的代码,因为这个方法中有很多代码

有人能帮忙吗

这是我认为效率低下的解决这个问题的方法。。通过分别检索每个数据点来创建新的用户对象

private void createGame(final String gameID) {
    FCGames.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            DataSnapshot ds1 = dataSnapshot.child(gameID).child("user1");
            DataSnapshot ds2 = dataSnapshot.child(gameID).child("user2");
            String userName = ds1.child("userName").getValue().toString();
            String HorT = ds1.child("horT").getValue().toString();
            String uid = ds1.child("uid").getValue().toString();
            String userName2 = ds2.child("userName").getValue().toString();
            String HorT2 = ds2.child("horT").getValue().toString();
            String uid2 = ds2.child("uid").getValue().toString();

            User user1 = new User(userName, 0, HorT, uid, gameID);
            User user2 = new User(userName2, 0, HorT2, uid2, gameID);

            FCGameMaker fc = new FCGameMaker(user1, user2, false, false, gameID);
            FlipCoinGames.child(gameID).setValue(fc);
            startActivity(new Intent(FlipCoinLobby.this, FlipCoin.class));
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

    FCGames.child(gameID).removeValue();
}

共 (0) 个答案