我为我的应用设置了一个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
。当数据库中没有数据时,这怎么可能?
为什么会发生这种情况,如何在数据库为空时向用户显示警报?
答案 0 :(得分:2)
dataSnapshot
对象本身永远不会是null
。但是你可以通过调用dataSnapshot.exists()
来询问它是否有任何数据。所以:
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Log.d("dataSnapshot", "AVAILABLE");
} else {
Log.d("dataSnapshot", "NO DATA");
}
}