我正在尝试读取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。
答案 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;
}