我使用此代码检查我的数据库中是否有特定数据:
mDatabase.child("TempTransaction").child(MainActivity.User.getID()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child("state").getValue().equals("Pending")) {
mTransactionExist = true;
} else {
mTransactionExist = false;
}
}
我首先想到如果我的json数据库中没有与该特定子进程的TempTransaction,则永远不应该执行ValueEventListener(onDataChange)。事实证明,即使我改变了孩子" TempTransaction"任何字符串,如" asdasfasfx"或" xcvcxwasd" onDataChange仍然被调用。 这是为什么?
如果在db结构中找不到特定的子节点,是否有任何firebase默认关键字或某些内容使其跳过?
答案 0 :(得分:2)
将始终“立即”使用该位置的当前值调用ValueEventListener
。如果该位置没有当前值,则将使用空快照调用它。
无法更改此行为,但您可以使用以下方法检测空快照:
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
答案 1 :(得分:0)
您需要使用addListenerForSingleValueEvent()
方法。为特定位置的数据中的单个更改添加侦听器。该侦听器将使用该位置的数据值触发一次。
希望它有所帮助。