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

时间:2018-02-09 11:46:36

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

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

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

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

4 个答案:

答案 0 :(得分:2)

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

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

然后是的,每次进入该活动时,都会创建一个新的推送ID。这是因为push()会生成随机ID。

为了能够解决此问题,您需要稍后添加push()或在条件下添加 ref.push().child("name").setValue(name);

所以你可以点击按钮添加它:

{{1}}

这样,每次单击按钮时,它都会生成推送ID,而不是在重新启动活动时。

答案 1 :(得分:1)

您可以使用push()在Firebase数据库中创建唯一键,然后在该键下添加子节点。现在,下次进入该活动时,首先检查父节点是否存在。如果节点存在,则保存父节点密钥并使用它来保存新的子节点。

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

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

答案 2 :(得分:0)

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

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()方法。

答案 3 :(得分:0)

使用timestamp作为唯一键,firebase本身创建唯一ID