首页 > 解决方案 > android studio开发代码中的执行顺序

问题描述

我试图在我的代码中实现执行顺序。这是我的应用程序中的用户注册函数,当我调用该函数时,输出如下(假设帐户存在): test1 帐户存在 但我的预期输出是:帐户存在 test1 我不知道问题出在哪里,谁能帮我解决这个问题?提前致谢。

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;
}

我的预期输出是: 帐户存在 test1 但实际输出是: test1 帐户存在

标签: javaandroidfirebase

解决方案


所有 Firebase API 都是异步的,这是有充分理由的。您需要学习如何进行异步编程才能使用它。真的没有简单的方法解决它。

您不应该尝试在同步的阻塞 API 中打开异步 API,因为如果在主线程上运行并且数据库响应时间超过几秒钟,则存在应用程序未响应对话框崩溃的风险(因为连接很慢,或者有很多数据)。API 是异步的这一事实可以保护您免受这场灾难的影响。


推荐阅读