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