Java android studio开发代码中的执行顺序

Java android studio开发代码中的执行顺序,java,android,firebase,Java,Android,Firebase,我试图在代码中实现执行序列。 这是我应用程序中的用户注册功能,当我调用该功能时, 假设账户存在,输出如下: 测试1 帐户存在 但我的预期结果是: 帐户存在 测试1 我不知道问题出在哪里,有人能帮我解决这个问题吗? 提前谢谢 private boolean checkAccountExist(final String userID){ FirebaseDatabase.getInstance().getReference("userAccount").child(userID); cDB

我试图在代码中实现执行序列。 这是我应用程序中的用户注册功能,当我调用该功能时, 假设账户存在,输出如下: 测试1 帐户存在 但我的预期结果是: 帐户存在 测试1 我不知道问题出在哪里,有人能帮我解决这个问题吗? 提前谢谢

private boolean checkAccountExist(final String userID){
FirebaseDatabase.getInstance().getReference("userAccount").child(userID);
    cDB = FirebaseDatabase.getInstance().getReference("userAccount");
    cDB.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.child(userID).exists()){
                System.out.println("Account Exist");
            }
            else{
                System.out.println("Account isn't exist");
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {}
    });
    System.out.println("test1");
    return true;
}
我的预期产出是: 帐户存在 测试1 但实际产出是: 测试1 帐户的存在有很好的理由。您需要学习如何进行异步编程才能使用它。真的没有简单的办法


您不应该尝试在同步、阻塞API中打开异步API,因为如果应用程序未响应对话框在主线程上运行,并且由于连接速度慢或数据量大,数据库响应时间超过几秒钟,则会有导致应用程序崩溃的风险。API是异步的,这一事实可以保护您免受此灾难。

这是一个回调。当它被完全不同地调用时,但它不是阻塞的,并且不需要在测试打印之前或之后执行。有没有办法让它按顺序运行?我仍然对它的回调有点困惑,我认为它应该首先运行onDataChange函数,然后在回调方法中添加第二次打印。除此之外,没有。@Zoe谢谢你,我知道问题出在哪里。它似乎总是先运行返回操作,然后运行回调方法,这是真的吗?