База данных Firebase в реальном времени: как использовать addValueListener - PullRequest
0 голосов
/ 21 октября 2018

Я новичок в программировании на Android и создании многопользовательской игры с использованием Firebase.Я думаю о логике того, как пользователи могут запустить игру.

То, что я пытаюсь сделать, это показать тост, когда комната, в которую играют пользователи, заполняется.Но мне интересно, как другие устройства могут определить, переполнена ли комната.Я думал addListenerForSingleValueEvent за это, но это не работает, как я ожидал.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_name);

    String roomName = getIntent().getExtras().getString("ROOM_NAME");
    thisRoom = FirebaseDatabase.getInstance().getReference().child(roomName);

    thisRoom.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            //when the room gets full, start the game
            int numberOfPlayers = (int) dataSnapshot.getChildrenCount();
            if (numberOfPlayers >= 2) {
                Toast.makeText(MultiplayerStreetViewActivity.this, "Game Starts", Toast.LENGTH_LONG).show();
           //do something
            }
        }

Я проверил, работает ли он, используя два эмулятора.А для первого игрока, который начал игру раньше, Тост не появляется, когда добавляется второе значение.Как устройства могут проверять, когда новые значения добавляются автоматически?Я уверен, что что-то неправильно понимаю и совершаю глупую ошибку. Как я могу делать то, что хочу?

1 Ответ

0 голосов
/ 21 октября 2018

У меня есть идея: добавить дочерний прослушиватель событий для thisRoom и использовать список массивов на локальном устройстве для управления игроками в комнате.Каждый раз, когда вы добавляете, изменяете или удаляете игрока в комнатах.Слушатель сразу активируется, и вы можете добавлять, изменять или удалять список массивов.Таким образом, вы можете узнать, заполнена ли комната или нет (на основании вашего списка массивов или нет).

 thisRoom.addChildEventListener (new ChildEventListener(){
    public void onCancelled(DatabaseError error)
    {
        //say something to player 
    }
    public void onChildAdded(DataSnapshot snapshot, String previousChildName)
    {
        Player newPlayer = snapshot.getValue(Player.class);
        //then add newPlayer to local array list
    }
    public void  onChildChanged(DataSnapshot snapshot, String previousChildName)
    {
        Player changedPlayer = snapshot.getValue(Player.class);
        //then do something to modify info of the player in the array list 
    }
    public void  onChildMoved(DataSnapshot snapshot, String previousChildName) 
    {
       //I have no idea for this method
    }
    public void  onChildRemoved(DataSnapshot snapshot)
    {
       //remove player from your array list
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...