android - 'addChildEventListener()`下无法检测dataSnapshot是否为空

标签 android firebase firebase-realtime-database

我已经为我的应用设置了一个 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是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46605342/

相关文章:

javascript - 使用带有 value 和 Key 的 startAt 的 Firebase 分页不起作用

Android 最低 SDK 问题

android - 在 onDestroy() 将变量从服务传输到已经打开的 Main-Activity

firebase - 在 github 操作上运行 firebase 模拟器

javascript - 在 JavaScript 中读取 Firebase 数据库后,For 循环不起作用

swift - 从 Firebase 数据库获取直接后代

安卓 : Application is not installed on your phone (Widget)

java - Android Wear Watch Face获取手机电量百分比

Firebase 身份验证 : why my android users do not receive verification email?

重新加载页面时 Firebase 数据读取问题 - Vue.js