因此,在我的应用程序中,我有一个游戏大厅,用户在其中制作游戏,然后另一个用户加入游戏。当用户制作游戏时,它们会像user1在适当的节点中一样存储在数据库中,当用户加入游戏时,它们会像user2在同一节点中一样保存。他们在这里存储了他们的信息,如下所示。
图中的数据库信息是大厅版本的数据,每当有第二个有效用户加入游戏时,我都希望删除这个数据库(因为它是作为界面绘制的,我不希望其他用户加入一个完整的游戏),我希望它成为一个新的“活动游戏”数据库。
我知道如何做到这一点,但我想知道如何将用户对象移动user1到user2新数据库中。我试图为这些项目创建一个回调作为用户对象,但我遇到了很多问题,所以我希望有另一种方法来解决这个问题。
现在,一旦该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();
}
