Как искать, если имя пользователя существует в данной базе данных Firebase?

android firebase firebase-realtime-database

13726 просмотра

3 ответа

{
 users:
  {
    apple:
     {
       username :  apple
       email    :  apple@xy.com
       uid      :  tyutyutyu
     }
    mango:
     {
       username :  mango
       email    :  mango@xy.com
       uid      :  erererer
     }
  }
}

Это то, что я делаю СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ, если метод checkUsername возвращает 0

 if(checkFirebaseForUsername(username)==0) {

                    mAuth.createUserWithEmailAndPassword(email, password)
                            .addOnCompleteListener(SignUpActivity.this, new OnCompleteListener<AuthResult>() {
                                @Override
                                public void onComplete(@NonNull Task<AuthResult> task) {
                                    if (task.isSuccessful()) {

                                        Toast.makeText(getBaseContext(),"inside",Toast.LENGTH_LONG).show();
                                        User newUser = new User();
                                        newUser.setUserId(mAuth.getCurrentUser().getUid());
                                        newUser.setUsername(username);
                                        newUser.setEmailId(email);

                                        try{
                                            mRef.child("users").child(username).setValue(newUser);
                                        }
                                        catch(Exception e){
                                            Toast.makeText(SignUpActivity.this,"error while inserting",Toast.LENGTH_LONG).show();
                                        }
                                        AlertDialog.Builder builder = new AlertDialog.Builder(SignUpActivity.this);
                                        builder.setTitle(R.string.signup_success)
                                                .setPositiveButton(R.string.login_button_label, new DialogInterface.OnClickListener() {

                                                    @Override
                                                    public void onClick(DialogInterface dialogInterface, int i) {

                                                        Intent intent = new Intent(SignUpActivity.this, LoginActivity.class);
                                                        startActivity(intent);
                                                        finish();
                                                    }
                                                });
                                        AlertDialog dialog = builder.create();
                                        dialog.show();
                                    } else {
                                        AlertDialog.Builder builder = new AlertDialog.Builder(SignUpActivity.this);
                                        builder.setTitle(R.string.signup_error_title)
                                                .setPositiveButton(android.R.string.ok, null);
                                        AlertDialog dialog = builder.create();
                                        dialog.show();
                                    }
}

Мой метод checkUsername -

public int checkFirebaseForUsername(String passedUsername){
    final int[] flag = {0};
    final String myPassedUsername = passedUsername;
    Log.e("tag","working now");
    //flag[0]=1;

    DatabaseReference mTest = FirebaseDatabase.getInstance().getReference();

       mTest.child("users").child(passedUsername).addChildEventListener(new ChildEventListener() {

        @Override
        public void onDataChanged(DataSnapshot dataSnapshot) {
            Log.e("tag","checking");

            if(dataSnapshot.exists()){
                Log.e("tag","exists");
                flag[0]=1;
               }
         }
        @Override
        public void onCancelled(DataSnapshot datasnapshot){

         }
});




    if(flag[0]==1)
        return 1;
    else
        return 0;
}

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

Поэтому мне нужно проверить, есть ли какой-либо пользователь, уже зарегистрированный с таким именем ... Пожалуйста, помогите, я уже попробовал все, что я мог понять после обращения к документации, представленной на официальном блоге Firebase, но все напрасно !!

Автор: Shubham Chauhan Источник Размещён: 08.11.2019 11:12

Ответы (3)


5 плюса

Решение

РЕДАКТИРОВАТЬ: Новый ответ, старый еще ниже.

Я бы избавился от вашего метода, "checkFirebaseForUsername"потому что он всегда будет возвращать 0, несмотря ни на что.

Что вам нужно сделать, это:

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) {

  }
});

Старый ответ:

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

Если, например, узел apple [X] всегда будет иметь то же имя, что и дочернее свойство «username»: apple [Y], то это так просто.

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) {

  }
});

однако, если, скажем, узел apple [X] может иметь значение, отличное от свойства apple [Y], и вы хотите увидеть, существует ли какой-либо узел, в котором свойство username одинаково, тогда вам нужно будет выполнить запрос.

 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) {

      }
  });
Автор: Linxy Размещён: 20.08.2016 11:16

3 плюса

Вы можете попробовать это.

                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){

                            }
                        }

                );
Автор: JBSarili Размещён: 11.06.2017 04:05

1 плюс

Вы просто проверяете, есть ли у пользователя выход или нет, по приведенному ниже коду:

    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());
            }
        });

Вы также можете посмотреть документацию по Firebase по ссылке ниже:

Прочитать данные один раз

Автор: pRaNaY Размещён: 20.08.2016 11:19
32x32