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");

这很好用,因为 :-

  1. uid 对于每个用户都是唯一的,并且是在数据库中拥有和识别用户节点的最简单和最可靠的方式 - 特别是在多个位置。

  2. 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

等等....