如何创建唯一密钥并使用它在 Firebase 中发送数据?

How can I create a unique key and use it to send data in Firebase?

我在我的项目中使用 Firebase,我试图使用 Firebase 创建一个唯一的密钥。使用这个键,我想在用户启动 activity 时发送帖子。像这样:

 "Posts"
     |
      -> "Parent Unique key"
                 |
                 -> "child unique key 1"
                 -> "child unique key 2"
                 -> "child unique key 3"
                 ...

我想创建 Parent Unique key 并通过使用它发送帖子。我知道如何使用 push() 在 firebase 中创建唯一密钥,但问题是当用户重新启动 activity 时,将生成一个新的唯一密钥。我不想在创建一次后再次创建相同的父密钥,并且我不能在此处使用 user_id,因为多个用户具有不同的 ID。此外,我不想将父密钥存储在某些存储介质中。是否可以在 firebase 中创建这样的密钥?

要解决此问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String uniqueKey = rootRef.child("Posts").push().getKey();
DatabaseReference uniqueKeyRef = rootRef.child("Posts").child(uniqueKey);

所以要添加数据,请仅使用 uniqueKeyRef 参考。因此,使用此代码,您只会创建一个唯一 ID 一次。您将能够在单个 ID 下添加这些孩子。

如果您需要另一个密钥,请参阅 UUID,它可以帮助您为 Firebase 数据库生成唯一密钥,而无需使用 push() 方法。

如果您在 onCreate() 方法中执行此操作:

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Posts").push();

那么是的,每次您输入 activity 都会创建一个新的推送 ID。这是因为 push() 生成了一个随机 id。

要解决这个问题,你需要在后面添加push()..或者在条件下但不是在开始的时候。

因此您可以在单击按钮时添加它:

 ref.push().child("name").setValue(name);

这样每次你点击一个按钮它都会生成一个推送 id,而不是当你重新启动 activity。

您可以使用 push() 在 Firebase 数据库中创建一个唯一键,然后在该键下添加子节点。现在下次当你遇到那个 activity 时,首先检查父节点是否存在。如果节点存在,保存父节点key,用于保存新的子节点。

    String strParentKey;
        DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference("Posts");
                    mDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            if (dataSnapshot != null && dataSnapshot.exists()) {
                                // parent node exists, get parent node from datasnapshot
                              strParentKey = dataSnapshot.value().toString();
                            } else {
                               // parent node doesn't exists, generate parent node using push
                               strParentKey = FirebaseDatabase.getInstance().getReference().child("Posts").push().getKey();
                            }
                        }

                        @Override
                        public void onCancelled(final DatabaseError pDatabaseError) {
                            pOnChildCheckListener.onChildDoesntExist();
                        }
                    });

现在使用 parentKey,您可以使用该引用添加子节点。

String childKey = FirebaseDatabase.getInstance().getReference("Posts").child(strParentKey).push().getKey();

希望这能帮助您找到解决方案。