为了账号安全,请及时绑定邮箱和手机立即绑定

在firebase android studio中插入数据时如何添加主键?

在firebase android studio中插入数据时如何添加主键?

慕无忌1623718 2021-10-06 10:23:25
当他们在我的应用程序中注册时,如何为每个用户添加主键?这是我当前使用用户名作为主键的代码(编程中的不良做法):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;}我只是 firebase 的新手,这就是为什么我很难理解它。任何帮助将不胜感激,谢谢。
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

要为新的子节点生成唯一键,请使用 Firebase 的push()方法:

table_user.push().setValue(user);

生成的密钥push()在统计上保证是唯一的,是在客户端生成的(即使没有互联网连接也可以),并且是按时间顺序排列的。唯一的缺点是它们有点长,因此很难记住。尽管如此,对于基本上按时间顺序排列的数据或没有自然键的数据来说,它们确实是最好的键。

需要考虑的一件事是使用 Firebase 身份验证来对用户进行身份验证。如果你这样做,用户有一个自然的关键:他们所谓的UID。由于它们有一个自然键,在这种情况下,您应该将它们存储在键下。所以:

table_user.child(uidFromAuthentication).setValue(user);


查看完整回答
反对 回复 2021-10-06
  • 1 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信