如何创建唯一密钥并使用它在 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();
希望这能帮助您找到解决方案。
我在我的项目中使用 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();
希望这能帮助您找到解决方案。