猿问

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

当他们在我的应用程序中注册时,如何为每个用户添加主键?这是我当前使用用户名作为主键的代码(编程中的不良做法):


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 的新手,这就是为什么我很难理解它。任何帮助将不胜感激,谢谢。


慕无忌1623718
浏览 168回答 1
1回答

Helenr

要为新的子节点生成唯一键,请使用 Firebase 的push()方法:table_user.push().setValue(user);生成的密钥push()在统计上保证是唯一的,是在客户端生成的(即使没有互联网连接也可以),并且是按时间顺序排列的。唯一的缺点是它们有点长,因此很难记住。尽管如此,对于基本上按时间顺序排列的数据或没有自然键的数据来说,它们确实是最好的键。需要考虑的一件事是使用 Firebase 身份验证来对用户进行身份验证。如果你这样做,用户也有一个自然的关键:他们所谓的UID。由于它们有一个自然键,在这种情况下,您应该将它们存储在该键下。所以:table_user.child(uidFromAuthentication).setValue(user);
随时随地看视频慕课网APP

相关分类

Java
我要回答