首页 > 解决方案 > 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;

}

wheredatabaseusernameExists_resultare 两个字段。当然,由于用户名是文档ID,true如果文档(以及用户名)存在,则该函数应该返回,false如果不存在。

现在,问题在于函数——除了第一次调用之外——总是返回它应该在前一次调用中返回的值。

例如,如果在第一次调用时函数返回true,因为用户名已经存在,然后我输入另一个不存在的用户名,函数也会返回true. 在下一次调用中,它将返回false,因为它应该在上一次调用中返回。并且在下一次调用时,它将返回上一次调用时应该返回的任何内容,依此类推。

有人对这种行为有解释吗?我可以提供任何需要的信息。

标签: androidfirebasegoogle-cloud-firestore

解决方案


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

推荐阅读