Как добавить первичный ключ при вставке данных в Firebase Android Studio? - PullRequest
0 голосов
/ 23 сентября 2018

Как добавить первичный ключ для каждого пользователя, когда он регистрируется в моем приложении?Вот мой текущий код, который я использовал имя пользователя в качестве первичного ключа (плохая практика в программировании):

btnRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final ProgressDialog mDialog = new ProgressDialog(Register.this);
            mDialog.setMessage("Please wait...");
            mDialog.show();

            table_user.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    //Check if the username already exists
                    if(dataSnapshot.child(username.getText().toString()).exists()){
                        mDialog.dismiss();
                        Toast.makeText(Register.this, "Username already exists", Toast.LENGTH_SHORT).show();
                    }
                    else{
                        mDialog.dismiss();
                        User user = new User(user_fname.getText().toString(), user_lname.getText().toString(), user_email.getText().toString(), user_pass.getText().toString());
                        table_user.child(username.getText().toString()).setValue(user);
                        Toast.makeText(Register.this, "Account successfully registered", Toast.LENGTH_SHORT).show();
                        finish();
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

        }
    });

И модель для моего пользователя:

public class User {
private String FirstName;
private String LastName;
private String Email;
private String Password;

public User() {
}

public User(String firstName, String lastName, String email, String password) {
    FirstName = firstName;
    LastName = lastName;
    Email = email;
    Password = password;
}

public String getFirstName() {
    return FirstName;
}

public void setFirstName(String firstName) {
    FirstName = firstName;
}

public String getLastName() {
    return LastName;
}

public void setLastName(String lastName) {
    LastName = lastName;
}

public String getEmail() {
    return Email;
}

public void setEmail(String email) {
    Email = email;
}

public String getPassword() {
    return Password;
}

public void setPassword(String password) {
    Password = password;
}

}

Я просто новичок в Firebase, поэтому мне трудно понять это.Спасибо за любую помощь, спасибо.

1 Ответ

0 голосов
/ 23 сентября 2018

Чтобы сгенерировать уникальный ключ для нового дочернего узла, используйте метод Firebase push():

table_user.push().setValue(user);

Ключ, сгенерированный push(), статистически гарантированно является уникальным, генерируется на клиенте (так работает, даже если нет подключения к интернету), и является хронологическим.Единственным недостатком является то, что они немного длинные, и, следовательно, их трудно запомнить.Несмотря на то, что они действительно являются лучшими ключами для данных, которые, по сути, являются хронологическими или не имеют естественного ключа.

Одна вещь, которую следует учитывать, - это использовать Firebase Authentication для аутентификации пользователей.Если вы сделаете это, пользователи do получат естественный ключ: их так называемый UID.И поскольку они имеют естественный ключ, в этом случае вы должны хранить их под ключом , который .Итак:

table_user.child(uidFromAuthentication).setValue(user);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...