Firebase - 生成唯一键但不使用 push();
Firebase - Generate Unique Keys but not with push();
我想在 firebase 数据库中拥有我的自定义唯一键(User1、User2、User3、User4......Usern)。
当我使用 push();
时,它会生成一个长而不清楚的键,让我在排序时感到困惑。
我也试过 child("User1");
但它只在数据库中用给定的 User1
键保存一次。每次我想覆盖数据库时,它只更新 User1 值。
Are there any wiser options to have custom unique keys?
您应该考虑使用 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 另一个解决生成唯一密钥的答案。
不要使用 push()
为您的用户生成唯一键,而是使用 user
对象的 uid
在您的数据库中拥有用户节点。您可以通过调用以下行获取当前登录用户的 uid
:-
uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
然后调用下一行将其用作数据库中的节点:-
mDatabase.child("users").child(uid).child("username").setValue("ABC");
这很好用,因为 :-
uid
对于每个用户都是唯一的,并且是在数据库中拥有和识别用户节点的最简单和最可靠的方式 - 特别是在多个位置。
uid
登录用户可以使用上面的行从客户端 Android 应用程序轻松获得。因此,您不需要在客户端专门保存和统计唯一 ID。推荐这样做不仅是为了简单,也是为了安全。
因此,uid
节点非常适合数据库中的用户节点。但是,对于所有其他目的,push()
仍然是推荐的方法。
没有 .. 但您可以创建自己的自定义密钥。就像你想要的一样。但你必须做更多的额外工作。你必须先阅读数据库。
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);
这样结构就会像这样
- 你的项目
-用户
-用户1
-用户 2
等等....
我想在 firebase 数据库中拥有我的自定义唯一键(User1、User2、User3、User4......Usern)。
当我使用 push();
时,它会生成一个长而不清楚的键,让我在排序时感到困惑。
我也试过 child("User1");
但它只在数据库中用给定的 User1
键保存一次。每次我想覆盖数据库时,它只更新 User1 值。
Are there any wiser options to have custom unique keys?
您应该考虑使用 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 另一个解决生成唯一密钥的答案。
不要使用 push()
为您的用户生成唯一键,而是使用 user
对象的 uid
在您的数据库中拥有用户节点。您可以通过调用以下行获取当前登录用户的 uid
:-
uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
然后调用下一行将其用作数据库中的节点:-
mDatabase.child("users").child(uid).child("username").setValue("ABC");
这很好用,因为 :-
uid
对于每个用户都是唯一的,并且是在数据库中拥有和识别用户节点的最简单和最可靠的方式 - 特别是在多个位置。uid
登录用户可以使用上面的行从客户端 Android 应用程序轻松获得。因此,您不需要在客户端专门保存和统计唯一 ID。推荐这样做不仅是为了简单,也是为了安全。
因此,uid
节点非常适合数据库中的用户节点。但是,对于所有其他目的,push()
仍然是推荐的方法。
没有 .. 但您可以创建自己的自定义密钥。就像你想要的一样。但你必须做更多的额外工作。你必须先阅读数据库。
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);
这样结构就会像这样
- 你的项目 -用户 -用户1 -用户 2
等等....