Я пытаюсь сделать так, чтобы, когда пользователь создает открытую игру, в моей базе данных 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();
}
и теперь openGames.add находится в моем методе createGameLobby.
FirebaseDatabase.getInstance().getReference("FCGames").child(Integer.toString(gameSlot))
.setValue(gameMaker).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
openGames.add(userName);
Toast.makeText(FlipCoinLobby.this, "Game creation successful.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(FlipCoinLobby.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
^^ это просто важный фрагмент метода. А затем у меня есть onClickListener, который создает этот метод, когда кнопка нажата