Слушатель событий обновляет только экран одного пользователя - PullRequest
0 голосов
/ 26 октября 2018

Поэтому я пытаюсь сделать так, чтобы, когда пользователь создает открытую игру в игровом лобби, его имя пользователя и кнопка «присоединиться» появлялись на экране лобби.Он работает прямо сейчас, но проблема в том, что он появляется только для пользователя, который создал игру, он не будет отображаться для любого другого пользователя, если только другой пользователь не создаст игру, тогда появятся обе открытые игры, но это не такобновлять в реальном времени.

У меня так, что когда пользователь создает игру, игра и некоторые относящиеся к игре переменные добавляются в базу данных в реальном времени.И сейчас у меня есть прослушиватель событий, показанный ниже, который проверяет, обновляется ли игровой узел, и когда он обновляется, он должен обновлять пользовательский интерфейс, но он делает это только для пользователя, который создал игру.

    final RecyclerView recyclerView = findViewById(R.id.rvfcGames);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    final ArrayList<String> openGames = new ArrayList<>();
    adapter = new MyRecyclerViewAdapter(this, openGames);
    adapter.setClickListener(this);
    recyclerView.setAdapter(adapter);


  DatabaseReference cgRef = database.getReference("FCGames");
    cgRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            openGames.add("username");
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            //removeGame();
        }
    });

Этот фрагмент работает, потому что всякий раз, когда пользователь создает игру, он добавляет ее в список, но я не уверен, как сделать так, чтобы он обновлял пользовательский интерфейс в реальном времени для каждого пользователя, использующего приложение.

Так, что я должен сделать, чтобы обновить экран каждого пользователя в реальном времени, когда они находятся в лобби?

1 Ответ

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

Это снова я. Я хотел бы спросить, где вы добавили свой addValueEventListener?

Подтверждает, что все игроки слушают cgRef. Это делает все их onDataChange() вызванными, если было изменено любое поле cgRef.

например:

// For all players, listen to the ref in onCreate() of an Activity.
    onCreate(...){
            ...
            cgRef.addValueEventListener(new ValueEventListener() {
                // update UI in onDataChange()
                // maybe you wand to update your list then adapter.notifyDatasetChanged()
            }
    }

// For creator, write the game's data when the game created.
    createGame(...){
        cgRef.child("someName").setValue(someData);
    }

После cgRef был обновлен. Каждый, кто имел addValueEventListener(), должен получить обновление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...