【发布时间】:2021-06-02 13:08:40
【问题描述】:
我正在尝试创建一个函数来检查用户名是否被使用或是否可用,我在 firestore 中的唯一方式是 UniqueID 是用户名而不是字段。这是函数:
private boolean checkUsernameValidity(String enteredUsername) {
/**
* Create code for querying through firestore DB for enteredUsername
*/
final boolean[] usernameAvailable = {true};
String USERTAG = "User documents";
Log.d("Entered Username: ", enteredUsername);
DocumentReference userDocRef = users.document(enteredUsername);
userDocRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Log.d(USERTAG, "DocumentSnapshot data: " + document.getData());
Log.d("Warning", "Uh oh username is taken");
usernameAvailable[0] = false;
Toast.makeText(CreateAccount.this,
"This username is taken! Please enter a different username",
Toast.LENGTH_SHORT)
.show();
} else {
Log.d(USERTAG, "No such document, This Username is available");
}
} else {
Log.d(USERTAG, "get failed with ", task.getException());
}
}
});
/**
* If there was a user with entered username found already;
*/
if(!usernameAvailable[0]) {
return false;
}
if (enteredUsername.length() < 5) {
Toast.makeText(CreateAccount.this, "This username is too short",
Toast.LENGTH_SHORT)
.show();
return false;
}
Log.d("Status", "All Good!");
return true;
}
函数在usernameAvailable[0]改变前根据调试器返回true。图片在这里:
在图片中,成功状态的日志打印在表明用户名已被占用的日志之前。我猜该函数需要是异步的或类似的东西,但我不是 100% 创建异步方法。如何使我的函数检索文档(如果存在)并在获取文档函数中将我的 usernameAvailable[0] 设置为 false,然后再执行其余的 checkUsernameValidity 方法。
附: usernameAvailable 是一个最终的布尔数组,而不仅仅是一个布尔值,因为它是在内部类中访问的
【问题讨论】:
-
test发表评论
标签: java android firebase android-studio google-cloud-firestore