如何在 Firebase 数据库 Android 中添加新子项 [英] How to add new child in Firebase database Android

查看:19
本文介绍了如何在 Firebase 数据库 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆