簡體   English   中英

如何創建唯一密鑰並使用它在Firebase中發送數據?

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

我在項目中使用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中創建此類密鑰?

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

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

然后,是的,每次您輸入該活動時,都會創建一個新的推送ID。 這是因為push()生成一個隨機ID。

為了解決這個問題,您需要稍后..或在某種條件下但不是開始時添加push()

因此,您可以單擊按鈕添加它:

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

這樣,每次單擊按鈕時,它都會生成一個推送ID,而不是在您重新啟動活動時生成。

您可以使用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();

希望這會幫助您找到解決方案。

要解決此問題,請使用以下代碼:

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

使用時間戳記作為唯一鍵,firebase本身會創建唯一的id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM