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());
}