Как проверить есть ли уже пользователь с таким именем в БД?

Имеется структура базы данных: Database -> 1 уровень с названием Users -> второй уровень множество пользователей с UID -> третий уровень : username и соответсвующее значение имени пользователя. напиши код на Java который будет проверять в базе данных Firebase имеется ли уже зарегистрированный пользователь по полю username и если такой уже имеется, то прервать итерацию и вывести сообщение об этом. И чтобы эта функция возвращала true или false если пользователь с таким именем уже существует Имеется структура базы данных:

введите сюда описание изображения Имеется класс UsersCheck

package dem.corp.androidmessenger.users;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class UserChecker {
    private final DatabaseReference databaseReference;

    public UserChecker() {
        // Инициализация ссылки на базу данных
        databaseReference = FirebaseDatabase.getInstance().getReference("Users"); // Замените "users" на путь к вашей коллекции пользователей
    }

    public void checkIfUserExists(String username, UserCheckCallback callback) {
        databaseReference.orderByChild("1Sx2FCTKDcdfjhztPtTbWgSxFZP2").equalTo(username).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // Если результат не пустой, значит пользователь с таким именем уже существует
                boolean userExists = dataSnapshot.exists();
                callback.onCallback(userExists);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                // Обработка ошибок
                System.out.println("Ошибка при проверке пользователя: " + databaseError.getMessage());
                callback.onCallback(false);
            }
        });
    }

    public interface UserCheckCallback {
        void onCallback(boolean exists);
    }
}

имеется класс Register Activity :

package dem.corp.androidmessenger;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.FirebaseDatabase;

import java.util.HashMap;
import java.util.Objects;

import dem.corp.androidmessenger.databinding.ActivityRegisterBinding;
import dem.corp.androidmessenger.users.UserChecker;

public class RegisterActivity extends AppCompatActivity {

    private ActivityRegisterBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityRegisterBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        binding.signUpBtn.setOnClickListener(v -> {
            if (binding.emailEt.getText().toString().isEmpty() || binding.passwordEt.getText().toString().isEmpty()
                || binding.usernameEt.getText().toString().isEmpty()){
                Toast.makeText(getApplicationContext(), "Fields cannot be empty", Toast.LENGTH_SHORT).show();
            }else{


//my
                UserChecker userChecker = new UserChecker();
                String usernameToCheck = "zzz333555";

                userChecker.checkIfUserExists(usernameToCheck, exists -> {
                    if (exists) {
                        System.out.println("Пользователь с таким именем уже существует.");
                    } else {
                        System.out.println("Пользователь с таким именем не найден, можно зарегистрировать нового.");
                    }
                });
                //System.exit(0);



                FirebaseAuth.getInstance().createUserWithEmailAndPassword(binding.emailEt.getText().toString(), binding.passwordEt.getText().toString())
                        .addOnCompleteListener(task -> {
                            if (task.isSuccessful()){
                                Toast.makeText(getApplicationContext(), "Fregiter ", Toast.LENGTH_SHORT).show();
                                HashMap<String, String> userInfo = new HashMap<>();
                                userInfo.put("email", binding.emailEt.getText().toString());
                                userInfo.put("username", binding.usernameEt.getText().toString());
                                userInfo.put("profileImage", "");
                                userInfo.put("chats", "ZqnkGaeyk3UkRLRJH8Qh1tQiF7d3");

                                FirebaseDatabase.getInstance().getReference().child("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                                        .setValue(userInfo);



                                //добавим тестовый чат

                                // String chatIdmyTest = generateChatId(uid, "1Sx2FCTKDcdfjhztPtTbWgSxFZP2");
                                String chatIdmyTest =  "ZqnkGaeyk3UkRLRJH8Qh1tQiF7d3";

                                String uid = Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid();
                                HashMap<String, String> chatInfo = new HashMap<>();
                                chatInfo.put("user1", uid);
                                chatInfo.put("user2", "1Sx2FCTKDcdfjhztPtTbWgSxFZP2");
                                FirebaseDatabase.getInstance().getReference().child("Chats").child(chatIdmyTest)
                                        .setValue(chatInfo);


                                Toast.makeText(getApplicationContext(), "Fregiter OK OK", Toast.LENGTH_SHORT).show();
                                startActivity(new Intent(RegisterActivity.this, MainActivity.class));
                            }
                        });

            }
        });
    }







    
}

Проверка по email , password - есть ли такой пользователь уже имеется. Хотелось бы проверку по доп полю - username. То есть нужно каждого юзера с уникальным uid перебирать в БД ? и сверять его username - имеется ли такой. Не получается никак - все равно пишет в логе что "Пользователь с таким именем не найден, можно зарегистрировать нового." То есть у меня код сразу же после 1 уровня структуры БД - Users - сразу ищет поле username и сверяет его значение, а мне еще надо в поиск в логику добавить второй уровень - чтобы у каждого имеющегося uid он искал username и его значение сверял. Как проверить есть ли уже пользователь с таким именем в БД? Можете помочь, что не так в коде?


Ответы (0 шт):