更新所有用户的列表大小

我试图做到这一点,当用户创建一个开放的游戏时,在我的 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 创建它在按下按钮时调用该方法


哈士奇WWW
浏览 123回答 1
1回答

慕森王

在下面的代码段中,您在 onDataChange 侦听器中执行了 openGames.add(username) 。我认为这是对这个 ondatachange 函数的错误使用@Overridepublic void onDataChange(@NonNull DataSnapshot dataSnapshot) {&nbsp; &nbsp; openGames.add(userName);&nbsp; &nbsp; adapter.notifyDataSetChanged();}请使用它从数据库获取数据并更新您的数据。然后将您的数据推送到数据库。您也没有使用快照值。您可以从 获取最近更新的数据dataSnapshot。使用它来更新用户数据,然后将其推送到数据库
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java