我試圖做到這一點(diǎn),當(dāng)用戶創(chuàng)建一個(gè)開(kāi)放的游戲時(shí),在我的 Firebase 數(shù)據(jù)庫(kù)中,游戲的名稱就是列表的大小。因此,創(chuàng)建的第一個(gè)游戲的名稱將 = 0,如果另一個(gè)用戶創(chuàng)建游戲,則該游戲?qū)⒈粯?biāo)記為 1,依此類推。我現(xiàn)在已經(jīng)設(shè)置好了,所以游戲被標(biāo)記為游戲列表的大小,但列表并沒(méi)有真正更新。游戲一直被稱為“0”,因?yàn)樗J(rèn)為列表是空的,即使我在應(yīng)用程序中有視覺(jué)確認(rèn)有項(xiàng)目被添加到列表中。所以我的問(wèn)題是:我怎樣才能使列表在每次添加游戲時(shí)不斷更新,我怎樣才能使它為所有用戶而不僅僅是創(chuàng)建游戲的用戶更新?這就是我現(xiàn)在設(shè)置的。這是我用于列表的變量和獲取列表大小的整數(shù)ArrayList<String> openGames = new ArrayList<>();int gameSlot = openGames.size();這是我在創(chuàng)建游戲時(shí)用來(lái)命名游戲的內(nèi)容。gameMaker = new GameMaker(hp.uid, userName, wagerD, gameSlot);FirebaseDatabase.getInstance().getReference("FCGames").child(Integer.toString(gameSlot)) .setValue(gameMaker).addOnCompleteListener...這就是我必須將游戲添加到列表中的內(nèi)容。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) { } });所以我的問(wèn)題是如何正確更新此列表以及如何為應(yīng)用程序上的所有用戶更新它?編輯這是我對(duì) 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(); }^^ 這只是該方法的重要片段。然后我有一個(gè) onClickListener 創(chuàng)建它在按下按鈕時(shí)調(diào)用該方法
1 回答

慕森王
TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
在下面的代碼段中,您在 onDataChange 偵聽(tīng)器中執(zhí)行了 openGames.add(username) 。我認(rèn)為這是對(duì)這個(gè) ondatachange 函數(shù)的錯(cuò)誤使用
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
openGames.add(userName);
adapter.notifyDataSetChanged();
}
請(qǐng)使用它從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)并更新您的數(shù)據(jù)。然后將您的數(shù)據(jù)推送到數(shù)據(jù)庫(kù)。您也沒(méi)有使用快照值。您可以從 獲取最近更新的數(shù)據(jù)dataSnapshot。使用它來(lái)更新用戶數(shù)據(jù),然后將其推送到數(shù)據(jù)庫(kù)
添加回答
舉報(bào)
0/150
提交
取消