How to search if a username exist in the given firebase database?

前端 未结 3 850
不思量自难忘°
不思量自难忘° 2021-01-01 02:59
{
 users:
  {
    apple:
     {
       username :  apple
       email    :  apple@xy.com
       uid      :  tyutyutyu
     }
    mango:
     {
       username :  man         


        
相关标签:
3条回答
  • 2021-01-01 03:44

    You may try this.

                    final String userName = unameEditText.getText().toString();
                    databaseReference.child("users").orderByChild("username").equalTo(userName).addListenerForSingleValueEvent(
                            new ValueEventListener() {
    
                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {
    
                                    Log.i(Constants.TAG, "dataSnapshot value = " + dataSnapshot.getValue());
    
                                    if (dataSnapshot.exists()) {
    
                                        // User Exists
                                        // Do your stuff here if user already exists
                                        Toast.makeText(getApplicationContext(), "Username already exists. Please try other username.", Toast.LENGTH_SHORT).show();
    
                                    } else {
    
                                        // User Not Yet Exists
                                        // Do your stuff here if user not yet exists
                                    }
                                }
                                @Override
                                public void onCancelled (DatabaseError databaseError){
    
                                }
                            }
    
                    );
    
    0 讨论(0)
  • 2021-01-01 03:47

    EDIT: New answer, old one still below.

    I would get rid of your method "checkFirebaseForUsername" because it will always return 0, no matter what.

    What you need to do is this:

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    ref.child("users").child("username").addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
         if(dataSnapshot.exists()){
          // use "username" already exists
          // Let the user know he needs to pick another username.
        } else {
          // User does not exist. NOW call createUserWithEmailAndPassword
          mAuth.createUserWithPassword(...);
          // Your previous code here.
    
        }                               
      }
    
      @Override
      public void onCancelled(DatabaseError databaseError) {
    
      }
    });
    

    Old Answer:

    {
     users:
      {
        apple[X]:
         {
           username :  apple[Y]
           email    :  apple@xy.com
           uid      :  tyutyutyu
         }
        mango:
         {
           username :  mango
           email    :  mango@xy.com
           uid      :  erererer
         }
      }
    }
    

    If for example, the node apple[X] will always have the same name as the child property "username":apple[Y], then it is as simple as this.

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    ref.child("users").child("username").addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
         if(dataSnapshot.exists()){
          // use "username" already exists
        } else {
          // "username" does not exist yet.
        }                               
      }
    
      @Override
      public void onCancelled(DatabaseError databaseError) {
    
      }
    });
    

    however, if say, the node apple[X] can have a different value than the property apple[Y], and you want to see if any node exists where the "username" property is the same, then you will need to do a query.

     Query query = FirebaseDatabase.getInstance().getReference().child("users").orderByChild("username").equalTo("usernameToCheckIfExists");
     query.addListenerForSingleValueEvent(new ValueEventListener() {
          @Override
          public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.getChildrenCount() > 0) {
                // 1 or more users exist which have the username property "usernameToCheckIfExists"
             }
           }
    
          @Override
          public void onCancelled(DatabaseError databaseError) {
    
          }
      });
    
    0 讨论(0)
  • 2021-01-01 03:47

    You just check if user is already exits or not by below code:

        private DatabaseReference mDatabase;
        // ...
        mDatabase = FirebaseDatabase.getInstance().getReference();
    
        final String userName = "your_user_name"; // replace with your user name
        mDatabase.child("users").child(userName).addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()) {
                       // User Exists
                       // Do your stuff here if user already exits
                     }
    
                }
    
                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.w(TAG, "getUser:onCancelled", databaseError.toException());
                }
            });
    

    You can also see Firebase doc for the same on below link:

    Read data once

    0 讨论(0)
提交回复
热议问题