为什么即使数据库中没有数据,仍然会调用OnDataChange()?

时间:2017-05-25 08:42:39

标签: android firebase firebase-realtime-database

我使用此代码检查我的数据库中是否有特定数据:

  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默认关键字或某些内容使其跳过?

2 个答案:

答案 0 :(得分:2)

将始终“立即”使用该位置的当前值调用ValueEventListener。如果该位置没有当前值,则将使用空快照调用它。

无法更改此行为,但您可以使用以下方法检测空快照:

public void onDataChange(DataSnapshot dataSnapshot) {
  if (dataSnapshot.exists()) {

答案 1 :(得分:0)

您需要使用addListenerForSingleValueEvent()方法。为特定位置的数据中的单个更改添加侦听器。该侦听器将使用该位置的数据值触发一次。

希望它有所帮助。