【发布时间】:2019-06-17 07:21:53
【问题描述】:
我正在尝试读取 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。
【问题讨论】:
-
从 Firestore 读取是异步操作。您的函数 checkUsername 将在 Firestore 任务完成之前返回。您需要调整逻辑,将需要运行的代码移动到 CompletionListener 并使用回调而不是函数。
标签: android