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

在上面的代码中,无论我如何更改用户的值,它都将进入任务.isSuccessful()if语句.该集合下只有两个用户名值"testuser"和"umair".

enter image description here

enter image description here

我以前没有使用过Firebase,所以我正在考虑这可能是一个明显的错误.

推荐答案

如果任务成功,并不意味着用户名已经存在.这意味着Firebase服务器没有拒绝您的读取操作.因此,如果任务成功,您可以读取/添加所需的数据,否则将引发异常.所以你的代码应该是这样的:

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

Java相关问答推荐

使用@MappdSuperClass扩展ParentClass&Won t继承ParentClass属性

对Java中的通配符参数的混淆

Kotlin内联互操作:强制装箱

在Spring终结点中,是否可以同时以大写和小写形式指定枚举常量?

PDFBox未加载内容

使用OAuth 2.0资源服务器JWT时的授权(授权)问题

从ActiveMQ Classic迁移到ActiveMQ Artemis需要进行哪些客户端更改?

每次FXMLLoader调用ApplationConext.getBean(类)时创建@Component的新实例

为什么在下面的Java泛型方法中没有类型限制?

向Java进程发送`kill-11`会引发NullPointerException吗?

在Spring Boot JPA for MySQL中为我的所有类创建Bean时出错?

为什么这种递归会有这样的行为?

泛型与泛型问题的完美解决方案?

为什么mvn编译生命周期阶段不只是编译已更改的java文件?

如何使用Java对随机生成的字母数字优惠券代码进行过期设置

在Spring Boot中使用咖啡因进行缓存-根据输出控制缓存

无泄漏函数的Java DRY

可以';不要在Intellij IDEA中使用最新的Java版本(JDK 21)

在外部类和内部类之间,当调用外部类内部或外部的主方法时,它们的静态初始化程序的运行顺序不同

如何在 IntelliJ 中获取 Visual Studio Code 的 Dark Modern Java colored颜色 语法