android studio 上的 Firestore 查询未按预期工作
Firestore query on android studio not working as expected
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("User")
.whereEqualTo("username", user)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()) {
Toast.makeText(Signup.this, "Username already exists please try again", Toast.LENGTH_SHORT).show();
}
else {
User newUser = new User(user, pass, mail);
CollectionReference dbUser = db.collection("User");
dbUser.add(newUser);
Intent intent = new Intent(Signup.this, StartScreen.class);
startActivity(intent);
}
}
});
在上面的代码中,无论我将用户的值更改为什么,它都会进入 task.isSuccessful() if 语句。该集合下仅有的两个用户名值是“testuser”和“umair”。
我之前没有使用过 Firebase,所以它很可能是一个明显的错误,我正在蒙混过关。
任务成功并不代表用户名已经存在。这意味着 Firebase 服务器没有拒绝您的读取操作。所以如果任务成功就可以read/add得到想要的数据,否则会抛出异常。所以你的代码应该是这样的:
if(task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
if (document.exists()) {
String userName = document.getString("username");
Log.d("TAG", "username already exists.");
} else {
Log.d("TAG", "username doesn't exist.");
User newUser = new User(user, pass, mail);
CollectionReference dbUser = db.collection("User");
dbUser.add(newUser);
Intent intent = new Intent(Signup.this, StartScreen.class);
startActivity(intent);
}
}
} else {
Log.d("TAG", task.getException().getMessage());
}
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("User")
.whereEqualTo("username", user)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()) {
Toast.makeText(Signup.this, "Username already exists please try again", Toast.LENGTH_SHORT).show();
}
else {
User newUser = new User(user, pass, mail);
CollectionReference dbUser = db.collection("User");
dbUser.add(newUser);
Intent intent = new Intent(Signup.this, StartScreen.class);
startActivity(intent);
}
}
});
在上面的代码中,无论我将用户的值更改为什么,它都会进入 task.isSuccessful() if 语句。该集合下仅有的两个用户名值是“testuser”和“umair”。
我之前没有使用过 Firebase,所以它很可能是一个明显的错误,我正在蒙混过关。
任务成功并不代表用户名已经存在。这意味着 Firebase 服务器没有拒绝您的读取操作。所以如果任务成功就可以read/add得到想要的数据,否则会抛出异常。所以你的代码应该是这样的:
if(task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
if (document.exists()) {
String userName = document.getString("username");
Log.d("TAG", "username already exists.");
} else {
Log.d("TAG", "username doesn't exist.");
User newUser = new User(user, pass, mail);
CollectionReference dbUser = db.collection("User");
dbUser.add(newUser);
Intent intent = new Intent(Signup.this, StartScreen.class);
startActivity(intent);
}
}
} else {
Log.d("TAG", task.getException().getMessage());
}