簡體   English   中英

如何搜索給定的firebase數據庫中是否存在用戶名?

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

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

如果checkUsername方法返回0,這就是我正在創建的CREATING USER

 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-database中插入用戶的方式,我想檢查一個用戶是否可用於新用戶。

因此,我需要檢查是否有任何用戶已經注冊了該用戶名....請幫助我已經嘗試過任何我能理解的東西后,在官方firebase博客上提供的文檔,但都是徒勞的!

編輯:新的答案,舊的仍然在下面。

我會擺脫你的方法"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) {

      }
  });

你可以試試這個。

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

                            }
                        }

                );

您只需通過以下代碼檢查用戶是否已退出:

    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文檔:

一次讀取數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM