简体   繁体   中英

How to add auto uid field in Firebase Firestore

I want to add an auto uid field in the firebase firestore when a user register their account. How to implement that in my codes to add uid which is generated by the firebase?

Here is my register.java codes:

public class Register extends AppCompatActivity {

//Variables
TextInputLayout username, email, PhoneNo, password;
RadioGroup radioGroup;
RadioButton selectedElderly, selectedGuardian;
Button regBtn, regToLoginBtn;

FirebaseAuth fAuth;
FirebaseFirestore fStore;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    fAuth = FirebaseAuth.getInstance();
    fStore = FirebaseFirestore.getInstance();

    //Hooks to all xml elements in activity_register.xml
    username = findViewById(R.id.reg_username);
    email = findViewById(R.id.reg_email);
    PhoneNo = findViewById(R.id.reg_phoneNo);
    password = findViewById(R.id.reg_password);
    regBtn = findViewById(R.id.reg_btn);
    regToLoginBtn = findViewById(R.id.reg_login_btn);
    radioGroup = findViewById(R.id.radio_type);
    selectedGuardian = findViewById(R.id.radioGuardian);
    selectedElderly = findViewById(R.id.radioElderly);

    regToLoginBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Register.this, Login.class);
            startActivity(intent);
        }
    });

    regBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (validateUsername() && validateEmail() && validatePhoneNo() && validateUserType() && validatePassword() == true) {
                Intent intent = new Intent(Register.this, Login.class);
                startActivity(intent);
            } else {
                validateUsername();
                validateEmail();
                validatePhoneNo();
                validateUserType();
                validatePassword();
            }
            fAuth.createUserWithEmailAndPassword(email.getEditText().getText().toString(), password.getEditText().getText().toString()).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                    FirebaseUser user = fAuth.getCurrentUser();
                    Toast.makeText(Register.this, "Account Created", Toast.LENGTH_SHORT).show();
                    DocumentReference df = fStore.collection("Users").document(user.getUid());
                    Map<String, Object> userInfo = new HashMap<>();
                    userInfo.put("Username", username.getEditText().getText().toString());
                    userInfo.put("Email", email.getEditText().getText().toString());
                    userInfo.put("phoneNo", PhoneNo.getEditText().getText().toString());
                    userInfo.put("Password",password.getEditText().getText().toString());
                    //specify the user is elderly
                    if (selectedElderly.isChecked()) {
                        userInfo.put("isElderly", "1");
                    }
                    if (selectedGuardian.isChecked()) {
                        userInfo.put("isGuardian", "1");
                    }

                    df.set(userInfo);
                    if (selectedElderly.isChecked()) {
                        startActivity(new Intent(getApplicationContext(), Login.class));
                        finish();
                    }
                    if (selectedGuardian.isChecked()) {
                        startActivity(new Intent(getApplicationContext(), Login.class));
                        finish();
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(Register.this, "Failed to Create Account", Toast.LENGTH_SHORT).show();
                }
            });

                }
    });
}
}

My database structure is:

database structure

As in the image, how to add one more field that contains auto-generated uid by the firebase?

If you want to add a generated id to the document, then you can do:

String id = fStore.collection("Users").document().getId();

This will generate a random id, then you can do:

DocumentReference df = fStore.collection("Users").document(user.getUid());
Map<String, Object> userInfo = new HashMap<>();

userInfo.put("Username", username.getEditText().getText().toString());
userInfo.put("Email", email.getEditText().getText().toString());
userInfo.put("phoneNo", PhoneNo.getEditText().getText().toString());
userInfo.put("Password",password.getEditText().getText().toString());
userInfo.put("id",id);

df.set(userInfo);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM