读取Firestore数据时,未设置布尔变量

时间:2019-06-17 07:21:53

标签: android

我正在尝试读取FireStore数据库上的所有数据,并且如果有任何文档名称匹配,则布尔变量应为false,否则应为true。但是布尔变量的值没有改变。

public boolean checkUsername(EditText editText){
    final boolean[] flag = {false};
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    DocumentReference docRef = db.collection("Users").document(editText.getText().toString());
    docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
                    flag[0] =false;
                    Log.d("", "DocumentSnapshot data: " + document.getData());
                } else {
                    flag[0]=true;
                    Log.d("", "No such document");
                }
            } else {
                Log.d("", "get failed with ", task.getException());
            }
        }
    });
    return flag[0];


}

这是Firestore数据库

托收文件

用户jaypatel,jaypatel2212

如果编辑文本值为jaypatel2212或jaypatel,则布尔变量应为false,否则应为true。

1 个答案:

答案 0 :(得分:-1)

布尔值的值未更改,因为您已声明 final 。 同样,当您总是只返回并更改第0个元素时,就不必使用数组。

返回标志也应该位于onComplete()函数中,因为从firestore中读取数据是异步任务,因此即使在可以从firestore中获取数据之前,您也要返回flag的默认初始化值。因此,代码应如下所示:-

private boolean flag = false;

        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
                    flag = false;
                    Log.d("", "DocumentSnapshot data: " + document.getData());
                } else {
                    flag = true;
                    Log.d("", "No such document");
                }
            } else {
                Log.d("", "get failed with ", task.getException());
            }
          return flag;
        }