Нахождение электронной почты и / или имени пользователя в Firebase - Android - PullRequest
0 голосов
/ 22 марта 2020

Я новичок в Firebase и Android, поэтому, пожалуйста, будьте осторожны со мной здесь.

Я пытаюсь проверить, есть ли имя пользователя и / или адрес электронной почты в БД. Проблема в том, что, как только код обнаруживает, что нет пользователя с таким именем, он go добавляет функцию addUser (), которая добавляет имя пользователя в Fire-base.

Я попытался прочитать в Android Studio Разработка, и я получаю управление единой проверкой для электронной почты или имени пользователя, но не для обоих.

старый код:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.child("Users").child(""+Username).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot.exists()){
           // User name already exists.
            Toast.makeText(MainActivity.this, "Username already found in DB, try different Username", Toast.LENGTH_SHORT).show();
            etUsername.setText("");
            etUsername.hasFocus();
        } else {
            DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
            ref.child("Users").child(""+Email).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()) {
                        // Email already exists
                        Toast.makeText(MainActivity.this, "Email already found in DB, try different Email", Toast.LENGTH_SHORT).show();
                        etEmail.setText("");
                        etEmail.hasFocus();
                    }else{
                        // if here, mean all good
                        addUser(Username, Password, Fname, Phone, Lname, Email);
                    }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
      }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

Может ли кто-нибудь помочь или направить меня к статье, которая демонстрирует 2 проверки с помощью Firebase?

edit: я узнал, что мне нужно сначала чтобы упорядочить индекс, по которому я искал индекс, поэтому я решил часть «Электронная почта», но часть «Имя пользователя» все еще сложна, поскольку я возвращаю объект вместо строки и не могу преобразовать его

Новый код:

ref.equalTo(Username).addListenerForSingleValueEvent(new ValueEventListener() {
   String check = (String)ref.equalTo(Username).toString();

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.i("Message","username is:"+check);
        if(dataSnapshot.exists()){
            Log.i("user","you check if user and got it, mean there is one in DB");
           // User name already exists.
            Toast.makeText(MainActivity.this, "Username already found in DB, try different Username", Toast.LENGTH_SHORT).show();
            etUsername.setText("");
            etUsername.hasFocus();
        } else {
            DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users");
            ref.orderByChild("Email").equalTo(Email).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()) {
                        // Email already exists
                        Toast.makeText(MainActivity.this, "Email already found in DB, try different Email", Toast.LENGTH_SHORT).show();
                        etEmail.setText("");
                        etEmail.hasFocus();
                    }else{
                        // if here, mean all good
                        addUser(Username, Password, Fname, Phone, Lname, Email);
                    }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
      }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

1 Ответ

0 голосов
/ 22 марта 2020

Так что, если смешать оба моих кода, вы получите желаемый результат. Чтобы проверить, есть ли имя пользователя в БД, я использовал первую часть своего кода, а для электронной почты - вторую. Полный код для проверки, используется ли имя пользователя и / или электронная почта в Fire-base

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users");
ref.child(""+Username).addListenerForSingleValueEvent(new ValueEventListener() {
   String check = (String)ref.equalTo(Username).toString();

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.i("Message","username is:"+check);
        if(dataSnapshot.exists()){
            Log.i("user","you check if user and got it, mean there is one in DB");
           // User name already exists.
            Toast.makeText(MainActivity.this, "Username already found in DB, try different Username", Toast.LENGTH_SHORT).show();
            etUsername.setText("");
            etUsername.hasFocus();
        } else {
            DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users");
            ref.orderByChild("Email").equalTo(Email).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()) {
                        // Email already exists
                        Toast.makeText(MainActivity.this, "Email already found in DB, try different Email", Toast.LENGTH_SHORT).show();
                        etEmail.setText("");
                        etEmail.hasFocus();
                    }else{
                        // if here, mean all good
                        addUser(Username, Password, Fname, Phone, Lname, Email);
                    }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
      }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
* 1003. * если у вас есть вопросы, не стесняйтесь спрашивать:)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...