Как я могу создать уникальный ключ и использовать его для отправки данных в Firebase?
Я использую Firebase в своем проекте, и я пытался создать уникальный ключ, используя Firebase. Используя этот ключ, я хочу отправлять сообщения, когда пользователь начинает свою деятельность. Как это:
"Posts"
|
-> "Parent Unique key"
|
-> "child unique key 1"
-> "child unique key 2"
-> "child unique key 3"
...
Я хочу создать Parent Unique key
и с его помощью я хочу отправлять сообщения. Я знаю, как создать уникальный ключ в FireBase, используя push()
но проблема в том, что когда пользователь перезапускает действие, генерируется новый уникальный ключ. Я не хочу создавать тот же самый родительский ключ снова после создания один раз, и я не могу использовать здесь user_id, поскольку у нескольких пользователей разные идентификаторы. Также я не хочу хранить родительский ключ на каком-либо носителе. Можно ли создать такой ключ в firebase?
4 ответа
Если вы делаете это внутри onCreate()
метод:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Posts").push();
тогда да, каждый раз, когда вы вводите это действие, будет создаваться новый push-идентификатор. Это потому что push()
генерирует случайный идентификатор
Чтобы решить эту проблему, нужно добавить push()
позже.. или при условии, но не в начале.
Так что вы можете добавить его по щелчку кнопки:
ref.push().child("name").setValue(name);
Таким образом, каждый раз, когда вы нажимаете кнопку, она генерирует идентификатор push, а не при перезапуске действия.
Чтобы решить эту проблему, используйте следующий код:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String uniqueKey = rootRef.child("Posts").push().getKey();
DatabaseReference uniqueKeyRef = rootRef.child("Posts").child(uniqueKey);
Так что для добавления данных используйте только uniqueKeyRef
ссылка. Таким образом, используя этот код, вы создадите уникальный идентификатор только один раз. Вы сможете добавить этих детей под одним идентификатором.
Если вам нужен другой ключ, см. UUID, который может помочь вам создать уникальные ключи для вашей базы данных Firebase без использования метода push().
Вы можете создать уникальный ключ в базе данных Firebase, используя push(), а затем добавить дочерние узлы под этим ключом. Теперь в следующий раз, когда вы придете к этому занятию, сначала проверьте, существует ли родительский узел или нет. Если узел существует, сохраните ключ родительского узла и используйте его для сохранения новых дочерних узлов.
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();
Надеюсь, что это поможет вам привести к решению.
Используйте метку времени в качестве уникального ключа, а сама Firebase создает уникальный идентификатор