Принудительное использование FireEbase ValueEventListener - PullRequest
0 голосов
/ 20 марта 2019

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

Проблема заключается в том, что вы уже присоединились к комнате, а затем вернетесь на домашний экран и затем вернетесь назад.в комнату, частью которой вы уже являетесь, ValueEventListener не вызывается, потому что база данных не обновляется, потому что пользователь уже находится в комнате.Это также означает, что список пользователей не отображается на экране, пока что-то не произойдет, чтобы обновить базу данных

Мой вопрос: как я могу заставить ValueEventListener без фактического обновления базы данных?

Это тот прослушиватель, который у меня сейчас есть

gameRef.child(ID).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        //updates the UI
        updateUI(new ListCallback() {
            @Override
            public void onCallback(List<String> value) {
                mAdapter.notifyDataSetChanged();
            }
        });
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
}); 

Это очень простой слушатель, который вызывает обратный вызов updateUI, показанный ниже, а затем обновляет RecyclerView У меня есть настройки для отображения списка участников вкомната.Как я могу принудительно вызвать это, когда Activity открыт?

Это мой updateUI обратный вызов

    public interface ListCallback {
    void onCallback(List<String> value);
}

public void updateUI(final ListCallback callBack) {
    gameRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
            getCurrentGame(new CurrentGameCallback() {
                @Override
                public void onCallback(String ID) {
                    memberList.clear();

                    for(DataSnapshot ds : dataSnapshot.child(ID).child("Members").getChildren()) {
                        String memberName = ds.child("firstName").getValue().toString();
                        memberList.add(memberName);
                    }
                }
            });
            callBack.onCallback(memberList);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

membersList - это просто ArrayList со всеми членами вкомната

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