我的函数在内部 class 中的代码完成之前返回一个值

My function iss returning a value before the code in the inner class finishes

我正在使用 java 编写一个 android 应用程序。我把它连接到实时数据库。我正在尝试搜索我的数据并检查其中是否存在某个键。

public boolean checkForKey(String key) {
    final boolean[] found = {false};
    ValueEventListener listener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (DataSnapshot dataSnapshot: snapshot.getChildren()){
                if(dataSnapshot.getKey().equals(key)) {
                    found[0] = true;
                }
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError error) {
        }
    };
    dbRef.child("Polls").addValueEventListener(listener);
    return found[0];
}

函数在完成实际搜索数据库的代码部分之前返回 false。感谢任何帮助解释为什么会发生这种情况。

来自docs:

onDataChange: This method will be called with a snapshot of the data at this location. It will also be called each time that data changes.

当数据发生变化时,方法中的任何内容都会被执行。换句话说,方法onDataChange指示程序在获得结果时(可能是任何时候)做什么

这是异步行为 - 正如@Turing85 指出的那样,这只会在数据更改时调用。

如果您想知道是否存在具有此键的内容,您可以构造一个查询,然后调用 get() 方法,该方法会 return 一个 Task<DataSnapshot>。对于 this task,您可以附加 addOnCompleteListener 侦听器来执行您想要的操作。这也是异步的,所以它只会 运行 有结果时。