Firebase - 生成唯一键但不使用push();

时间:2017-09-23 05:48:23

标签: android firebase firebase-realtime-database push unique-key

我希望在firebase数据库中拥有自定义唯一键(User1,User2,User3,User4 ...... Usern)。

当我使用push();时,它会生成一个长而不清楚的键,在排序时会让我感到困惑。

我也尝试了child("User1");,但它只使用给定的User1密钥在数据库中保存一次。每当我想覆盖数据库时,它只更新User1值。

  

是否有更明智的选项可以使用自定义唯一键?

3 个答案:

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

这很有效,因为: -

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

  2. 使用上述行可以从客户端Android应用程序轻松获取已登录用户的
  3. uid。因此,您无需在客户端上专门保存和计算唯一ID。建议不仅为了简单起见,还为了安全起见。

  4. 因此,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);

以便结构看起来像这样

  • yourProject     -Users        -user1        -user2

依旧......