【问题标题】:Firebase - Generate Unique Keys but not with push();Firebase - 生成唯一密钥,但不使用 push();
【发布时间】:2018-03-04 17:28:27
【问题描述】:

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

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

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

有没有更明智的选择来自定义唯一键?

【问题讨论】:

  • 这个问题我也遇到了,还是解决不了。我现在正在使用 push()。谁能回答一下??
  • 他们在博客上写了如何做到这一点firebase.googleblog.com/2015/02/…

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


【解决方案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);

这样结构看起来像这样

  • 你的项目 -用户 -user1 -user2

等等....

【讨论】:

    【解决方案2】:

    不要使用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() 仍然是推荐的方法。

    【讨论】:

      【解决方案3】:

      您应该考虑使用 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 到另一个解决生成唯一密钥的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 2023-04-04
        • 2013-07-18
        • 2012-04-09
        • 2016-04-19
        • 1970-01-01
        • 2019-07-25
        相关资源
        最近更新 更多