android - Android 上的 DocuemntSnapshot 是一个迟到的结果
问题描述
我有一个EditText
输入用户名的地方。单击“REGISTER”后,一个函数会处理用户名以检查它是否已经存在:
public boolean usernameExists (String username) {
database.collection("users").document(username).get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete (@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
usernameExists_result = task.getResult().exists();
}
else {
task.getException().printStackTrace();
}
}
});
return usernameExists_result;
}
wheredatabase
和usernameExists_result
are 两个字段。当然,由于用户名是文档ID,true
如果文档(以及用户名)存在,则该函数应该返回,false
如果不存在。
现在,问题在于函数——除了第一次调用之外——总是返回它应该在前一次调用中返回的值。
例如,如果在第一次调用时函数返回true
,因为用户名已经存在,然后我输入另一个不存在的用户名,函数也会返回true
. 在下一次调用中,它将返回false
,因为它应该在上一次调用中返回。并且在下一次调用时,它将返回上一次调用时应该返回的任何内容,依此类推。
有人对这种行为有解释吗?我可以提供任何需要的信息。
解决方案
Firebase 不是这样工作的。尽量避免制作一个方法布尔值 INSTEAD 只是继续。
此处的示例:-您的按钮
private void setBtnRegister(){
btnRegister.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
//Check all exception here. (incase editext is null)
//and then put the code here instead that method boolean
database.collection("users").document(username).get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete (@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
//Success, maybe go next step
}
else {
//Fail
}
}
});
}
});
}
推荐阅读
- puppeteer - 无法检索 href url 属性
- javascript - 如何连接 MongoDb 模型
- python-3.x - 如何将敏感数据保留在日志之外?
- opencl - 如果程序有效,如何出现 OpenCL 错误代码 -44 CL_INVALID_PROGRAM?
- shell - 在 Linux shell 中将 LDAP 时间戳转换为不同的格式
- r - 如何根据 R 中另一个数据框中的列删除列数据框中的行?
- swift - 将@State var 作为参数传递的 Swing 不会更新视图
- android - Android:自定义资源位置中的翻译文件夹
- python - 如果值包含特定字符串,如何创建字典
- sql - 基于模式 sql oracle 创建列