我試圖做到這一點,當用戶創建一個開放的游戲時,在我的 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
提交
取消