我希望在firebase数据库中拥有自定义唯一键(User1,User2,User3,User4 ...... Usern)。
当我使用push();
时,它会生成一个长而不清楚的键,在排序时会让我感到困惑。
我也尝试了child("User1");
,但它只使用给定的User1
密钥在数据库中保存一次。每当我想覆盖数据库时,它只更新User1值。
是否有更明智的选项可以使用自定义唯一键?
答案 0 :(得分:2)
您应该尝试使用UUID来帮助您为Firebase数据库生成唯一键,而无需使用push()
。
import java.util.UUID;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference dbRef = database.getReference("User1");
// mKey = dbRef.push().getKey();
mKey = UUID.randomUUID().toString();
}
}
这是另一个解决生成唯一密钥问题的link。
答案 1 :(得分:2)
不要使用push()
为用户生成唯一键,而是使用user
对象的uid
在数据库中拥有用户节点。您可以通过调用以下行来获取当前登录用户的uid
: -
uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
然后调用下一行将其用作数据库中的节点: -
mDatabase.child("users").child(uid).child("username").setValue("ABC");
这很有效,因为: -
uid
对每个用户都是唯一的,是在数据库中拥有和识别用户节点的最简单,最强大的方法 - 特别是在多个位置。
uid
。因此,您无需在客户端上专门保存和计算唯一ID。建议不仅为了简单起见,还为了安全起见。
因此,uid
节点非常适合数据库中的用户节点。但是,出于所有其他目的,push()
仍然是推荐的方法。
答案 2 :(得分:1)
没有..但你可以创建自己的自定义密钥。就像你想要的那样。但你必须做更多的额外工作。你必须先读取数据库。
FirebaseDatabase.getInstance().getReference().child("Users")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
HashMap<String, Object> user = (HashMap<String, Object>) dataSnapshot.getValue();
totalUser= user.size();
}
}
现在你可以用你的自定义键添加新值
FirebaseDatabase.getInstance().getReference().child("Users").child("user"+totalUsr).setValue(YourValue);
以便结构看起来像这样
依旧......