【问题标题】:Unable to detect if dataSnapshot is null or not under 'addChildEventListener()`无法在“addChildEventListener()”下检测 dataSnapshot 是否为空
【发布时间】:2017-10-06 22:19:15
【问题描述】:

我已经为我的应用设置了一个 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 打印出来。当数据库中没有数据时,这怎么可能?

为什么会发生这种情况?当数据库为空时,我可以做些什么来向用户显示警报?

【问题讨论】:

标签: android firebase firebase-realtime-database


【解决方案1】:

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

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

【讨论】:

  • 我试过dataSnapshot.getValue() == null,它奏效了。感谢您指出。
  • 为什么不像我在回答中那样使用dataSnapshot.exists()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2021-09-12
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多