我试图做到这一点,当用户创建一个开放的游戏时,在我的 Firebase 数据库中,游戏的名称就是列表的大小。因此,创建的第一个游戏的名称将 = 0,如果另一个用户创建游戏,则该游戏将被标记为 1,依此类推。我现在已经设置好了,所以游戏被标记为游戏列表的大小,但列表并没有真正更新。游戏一直被称为“0”,因为它认为列表是空的,即使我在应用程序中有视觉确认有项目被添加到列表中。所以我的问题是:我怎样才能使列表在每次添加游戏时不断更新,我怎样才能使它为所有用户而不仅仅是创建游戏的用户更新?这就是我现在设置的。这是我用于列表的变量和获取列表大小的整数ArrayList<String> openGames = new ArrayList<>();int gameSlot = openGames.size();这是我在创建游戏时用来命名游戏的内容。gameMaker = new GameMaker(hp.uid, userName, wagerD, gameSlot);FirebaseDatabase.getInstance().getReference("FCGames").child(Integer.toString(gameSlot)) .setValue(gameMaker).addOnCompleteListener...这就是我必须将游戏添加到列表中的内容。cgRef.child(Integer.toString(gameSlot)).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { openGames.add(userName); adapter.notifyDataSetChanged(); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } });所以我的问题是如何正确更新此列表以及如何为应用程序上的所有用户更新它?编辑这是我对 onChangeData 所做的 cgRef.child(Integer.toString(gameSlot)).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { wager = (String) dataSnapshot.child("wager").getValue(); gameSlot = openGames.size(); adapter.notifyDataSetChanged(); }^^ 这只是该方法的重要片段。然后我有一个 onClickListener 创建它在按下按钮时调用该方法
1 回答
慕森王
TA贡献1777条经验 获得超3个赞
在下面的代码段中,您在 onDataChange 侦听器中执行了 openGames.add(username) 。我认为这是对这个 ondatachange 函数的错误使用
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
openGames.add(userName);
adapter.notifyDataSetChanged();
}
请使用它从数据库获取数据并更新您的数据。然后将您的数据推送到数据库。您也没有使用快照值。您可以从 获取最近更新的数据dataSnapshot。使用它来更新用户数据,然后将其推送到数据库
添加回答
举报
0/150
提交
取消