我已经为我的应用设置了Firebase数据库,它看起来像这样:

app
 -category
  -subCategory
   -subSubCategory


我有这样的addChildEventListener()设置:

mDatabase.child("category").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            if (dataSnapshot != null) {

            } else {
                Log.d("dataSnapshot", "null");
            }
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


当数据库为空时,我想向用户显示警报,因此我尝试通过删除数据库中的所有内容来尝试执行以下操作:

app: null


但是即使现在,具有行Log.d("dataSnapshot", "null");的条件也不会被调用。

编辑:

我加了

mDatabase.child("category").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot != null) {
                    Log.d("dataSnapshot", "AVAILABLE");
                } else {
                    Log.d("dataSnapshot", "NULL");
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


然后打印出D/dataSnapshot: AVAILABLE。如果数据库中没有数据,怎么办?

为什么会发生这种情况?在数据库为空时如何显示用户警报?

最佳答案

dataSnapshot对象本身永远不会是null。但是您可以通过调用dataSnapshot.exists()询问是否有任何数据。所以:

public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        Log.d("dataSnapshot", "AVAILABLE");
    } else {
        Log.d("dataSnapshot", "NO DATA");
    }
}

关于android - 无法在'addChildEventListener()`下检测dataSnapshot是否为null。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46605342/

10-10 22:38