簡體   English   中英

如果已創建子級,則Firebase執行代碼

[英]Firebase execute code IF child has been created

我有以下代碼用於刪除某些數據形式的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,則代碼有效。 但是,當然,如果我不創建引用,那么我將沒有任何例外。 我應該為此安排2位聽眾嗎? 如果是的話,最好的方法是什么?

為了將來參考,我像這樣解決了它:

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) {

        }
    });

也許有更好的方法,但這在我想要的所有情況下都對我有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM