Код выполнения Firebase, если дочерний элемент был создан - PullRequest
0 голосов
/ 26 октября 2018

У меня есть следующий код для удаления некоторых данных из Firebase:

public void removeGameFromWaitQueue() {
        final DatabaseReference data = FirebaseDatabase.getInstance().getReference().child("games").child(mCurrentGameKey);
        data.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                if (snapshot.exists()) {
                    mCurrentGame = snapshot.getValue(DatabaseModels.Game.class);
                    if (mCurrentGame.getState() == DatabaseModels.Game.State.OPEN.ordinal()){
                        data.removeValue();
                }

            }

                }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }

        });

Как я могу проверить, существуют ли «данные», а затем выполнить весь остальной код? Это означает, что если я создаю DatabaseReference, код работает. Но, конечно, если я не создаю ссылку, то у меня есть null exceprion. Должен ли я иметь 2 слушателей для этого? И если да, то как лучше всего это сделать?

1 Ответ

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

Для дальнейшего использования я решил это так:

public void removeGameFromWaitQueue() {

        final DatabaseReference data = FirebaseDatabase.getInstance().getReference().child("games").child(mCurrentGameKey);
        data.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                if (snapshot.exists()) {
                    mCurrentGame = snapshot.getValue(DatabaseModels.Game.class);
                    if (mCurrentGame.getState() == DatabaseModels.Game.State.OPEN.ordinal()){
                        data.removeValue();
                }

            }

                }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }

        });

    }

public void removeAfterCheck(){
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            if (snapshot.hasChild("games")) {
               removeGameFromWaitQueue();
            }
        }

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

        }
    });

Возможно, есть лучший способ, но он работает для меня во всех случаях, как я хочу.

...