【发布时间】:2020-11-18 17:49:44
【问题描述】:
我正在构建一个应用程序并使用 Firestore 创建用户集合。在将新用户添加到集合之前,我需要在集合中检查电子邮件是否已在使用中,为此我构建了两种方法:一种用于阅读集合以查找具有该电子邮件的用户,另一种用于添加新用户如果一切正常。但无论我做什么,add 方法总是首先执行导致验证无用。我想这与 Firebase 的方法优先级有关,但我真的无法退出解决方案
这里有两种方法 第一个是验证,第二个是添加
private boolean createFirestoreUser(final String identificador) {
final boolean[] isValid = {true};
FirebaseFirestore.getInstance().collection("Usuarios")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
for (QueryDocumentSnapshot document : task.getResult()) {
if(identificador.equals(document.getString("identificador")))
isValid[0] = false;
}
}
});
return isValid[0];
}
private void createUser(Usuario novoUsuario) {
FirebaseFirestore.getInstance().collection("Usuarios")
.add(novoUsuario)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(final DocumentReference documentReference) {
documentReference
.update("id", documentReference.getId())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
loginSessionManager.createLoginSession(documentReference.getId());
loginSessionManager.checkLogin(this.getClass());
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
snackbar.showMensagemLonga(v,e.getMessage());
}
});
}
无论我在按钮侦听器上使用的顺序如何,总是首先调用第二个。我调试过,添加用户后确实进入isValid[0] = false
【问题讨论】:
-
您无法通过方法返回
isValid[0]。 Firebase API 是异步的,您需要等待数据。所以请检查副本,看看如何使用自定义回调解决这个问题。
标签: android android-studio google-cloud-firestore