我已经为我的应用设置了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/