慕無忌1623718
2021-10-06 10:23:25
當(dāng)他們在我的應(yīng)用程序中注冊時(shí),如何為每個(gè)用戶添加主鍵?這是我當(dāng)前使用用戶名作為主鍵的代碼(編程中的不良做法):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貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
要為新的子節(jié)點(diǎn)生成唯一鍵,請使用 Firebase 的push()
方法:
table_user.push().setValue(user);
生成的密鑰push()
在統(tǒng)計(jì)上保證是唯一的,是在客戶端生成的(即使沒有互聯(lián)網(wǎng)連接也可以),并且是按時(shí)間順序排列的。唯一的缺點(diǎn)是它們有點(diǎn)長,因此很難記住。盡管如此,對于基本上按時(shí)間順序排列的數(shù)據(jù)或沒有自然鍵的數(shù)據(jù)來說,它們確實(shí)是最好的鍵。
需要考慮的一件事是使用 Firebase 身份驗(yàn)證來對用戶進(jìn)行身份驗(yàn)證。如果你這樣做,用戶也有一個(gè)自然的關(guān)鍵:他們所謂的UID。由于它們有一個(gè)自然鍵,在這種情況下,您應(yīng)該將它們存儲在該鍵下。所以:
table_user.child(uidFromAuthentication).setValue(user);
添加回答
舉報(bào)
0/150
提交
取消