如何在 Firebase 数据库 Android 中添加新子项 [英] How to add new child in Firebase database Android
问题描述
我正在尝试在我的 Firebase
Android 应用中使用 DatabaseReference
添加一个新子项.我在做:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference()mDatabase.child("childToAdd").setValue(1);
我可以使用常规的 Firebase
参考来执行此操作,因为如果它不存在,它会将子项添加到数据库中.
我怎么能用 DatabaseReference
做到这一点?
感谢所有建议,但我在使用以下代码时遇到问题.当它进入 if 块时,它不会将数据推送到数据库中.
https://gist.github.com/rounaksalim95/a5cba332400c6caf80b30c
当我使用旧的 Firebase 参考尝试此操作时,我收到错误代码 11(从 firebase runloop 调用的用户代码),而使用新的数据库参考我收到错误代码 -3(PermissionDenied,即使我没有安全规则).
更新:
我让它做我想做的事,使用单值事件监听器:
Firebase userRef = new Firebase(BASEURL + "userData");userRef.addListenerForSingleValueEvent(new ValueEventListener() {@覆盖public void onDataChange(DataSnapshot dataSnapshot) {if (dataSnapshot.child(user.getUid()).getValue() == null) {userRef.child(user.getUid()).setValue(1);}}@覆盖public void onCancelled(FirebaseError firebaseError) {}});
但是数据库引用不允许我添加这样的值.
您需要调用 push()
为新数据生成唯一键:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference()mDatabase.push().setValue(1);
这会将新值附加到列表的末尾.
通过结合 push()
和 child()
方法,您可以在数据库中创建多个子项列表:
mDatabase.child("numbers").push().setValue(1);mDatabase.child("numbers").push().setValue(53);mDatabase.child("numbers").push().setValue(42);mDatabase.child("letters").push().setValue("a");mDatabase.child("letters").push().setValue("z");mDatabase.child("letters").push().setValue("c");
请参阅附加到数据列表部分 在 Firebase 文档中.
I'm trying to add a new child using the DatabaseReference
in my Firebase
Android app. I'm doing:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference()
mDatabase.child("childToAdd").setValue(1);
I can do this with a regular Firebase
Reference as it would add the child to the database if it isn't there.
How could I go about doing this with DatabaseReference
?
Edit: Thanks for all the suggestions but I'm having issues with the following code. When it enters the if block it does not push the data onto the database.
https://gist.github.com/rounaksalim95/a5cba332400c6caf8320f15b0cbf06e8
When I try this with the old Firebase reference I get error code 11 (User code called from firebase runloop) and with the new database reference I get error code -3 (PermissionDenied even though I have no security rules).
Update:
I got it to do what I wanted to using a single value event listener:
Firebase userRef = new Firebase(BASEURL + "userData");
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child(user.getUid()).getValue() == null) {
userRef.child(user.getUid()).setValue(1);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
However database reference doesn't let me add values like this.
You'll need to call push()
to generate a unique key for the new data:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference()
mDatabase.push().setValue(1);
This will append the new value at the end of the list.
By combining the push()
and child()
methods, you can create multiple lists of children in the database:
mDatabase.child("numbers").push().setValue(1);
mDatabase.child("numbers").push().setValue(53);
mDatabase.child("numbers").push().setValue(42);
mDatabase.child("letters").push().setValue("a");
mDatabase.child("letters").push().setValue("z");
mDatabase.child("letters").push().setValue("c");
See the section append to a list of data in the Firebase documentation.
这篇关于如何在 Firebase 数据库 Android 中添加新子项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!