поиск через дочерний узел (firebase) проверить, существует ли имя пользователя? - PullRequest
0 голосов
/ 30 марта 2019

Я создаю приложение для Android с активностью регистрации, я могу добавлять данные в базу данных Firebase, но у меня возникают проблемы с запросом существующих данных.По сути, я пытаюсь выполнить простой поиск по имени пользователя, который позволит пользователю уведомить его о том, что имя пользователя уже существует (чтобы они могли создать уникальное имя). Я уверен, что я делаю простую ошибку.Я создал отдельный узел, который является просто существующими именами пользователей (не уверен, что это разумно или нет, хаха).мой код все еще добавляет пользователя, даже если имя пользователя существует.любая помощь в этом вопросе будет УДИВИТЕЛЬНОЙ!спасибо всем!

Я попытался использовать dataSnapshot.exists и поигрался с узлами и т. д. (как я упоминал ранее при добавлении отдельного узла имени пользователя)

{
  "all usernames" : {
       "-LbEvUXcT9Mc3V7awfBz" : "qwerty",
       "-LbEwLUAwQsnlwFeya5o" : "ted"
   },
   "users" : {
       "CgnIejgGw0QvNAGbY5LWx6o17Us1" : {
            "userEmail" : "ted@gmail.com",
             "userName" : "ted"
     }
   }
 }

в случае, если мое изображение делаетне показывать мой узел, настроенный как показано выше:

username = etUsername.getText().toString();

    myRef.child("users").child("userName").equalTo(username).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            if(dataSnapshot.exists()){
                Toast.makeText(getContext(),"username Exists",Toast.LENGTH_LONG).show();

            } else {

                FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
                DatabaseReference myRef = firebaseDatabase.getReference();

                String userId = mAuth.getUid();

                userEmail = etEmail.getText().toString();
                username = etUsername.getText().toString();


                UserProfile userProfile = new UserProfile(username, userEmail);

                myRef.child("users").child(userId).setValue(userProfile);
                myRef.child("all usernames").push().setValue(username);
                createUser();

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }

    });[database structure][1]





[1]: https://i.stack.imgur.com/Xjfq5.png

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Чтобы отфильтровать недвижимость, сначала нужно заказать ее. Вы пытаетесь сделать это с помощью:

myRef.child("users").child("userName")

Но это буквально переводится на /users/userName, которого не существует.

Чтобы упорядочить каждый дочерний узел в /users в свойстве userName (а затем отфильтровать его), вам необходимо:

myRef.child("users").orderByChild("userName").equalTo(username)
0 голосов
/ 30 марта 2019

Обновите ваш код до:

myRef.child("users").child("userName").child(username).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapShot.getValue(String.class) ==null)
              {
                    //username doesn't exist
                    //do something 
              }
            else
              {
                     //username exist
                    //do something
              }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }

});

Кроме того, я думаю, вам следует изменить структуру базы данных на

username:{
      billy:true,
      name2:true
   }

, чтобы хранить более одного имени пользователя, поскольку в текущем сценарииВы переопределяете значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...