java - 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 帐户存在
解决方案
所有 Firebase API 都是异步的,这是有充分理由的。您需要学习如何进行异步编程才能使用它。真的没有简单的方法解决它。
您不应该尝试在同步的阻塞 API 中打开异步 API,因为如果在主线程上运行并且数据库响应时间超过几秒钟,则存在应用程序未响应对话框崩溃的风险(因为连接很慢,或者有很多数据)。API 是异步的这一事实可以保护您免受这场灾难的影响。
推荐阅读
- hybrid-mobile-app - PWA 和 Hybrid App 的技术差异
- javascript - jQuery - 使用复选框追加更改
- python - Pipenv:指定 setuptools 的版本
- android - 如何将整数文字放入 Room 查询?
- ios - StatusBar 呈现触发布局循环
- python - 如何在多处理的单独进程中更新共享变量?
- ag-grid - 在小网格中,工具面板菜单被剪裁
- node.js - 无法在全球范围内安装最新版本的 Yeoman 和适用于 Office 加载项的 Yeoman 生成器
- javascript - 使用 this.str 时变量未定义
- linux - 如何控制 /etc/hosts 文件不被覆盖