如何在Firebase数据库Android中添加新的子级

如何在Firebase数据库Android中添加新的子级,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在尝试使用我的FirebaseAndroid应用程序中的DatabaseReference添加一个新的孩子。我正在做: DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference() mDatabase.child("childToAdd").setValue(1); 我可以通过常规的Firebase引用来实现这一点,因为如果不存在子项,它会将其添加到数据库中。 我怎样才能使用数据库参考 编辑:谢谢所

我正在尝试使用我的
Firebase
Android应用程序中的
DatabaseReference
添加一个新的孩子。我正在做:

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference() 
mDatabase.child("childToAdd").setValue(1);
我可以通过常规的
Firebase
引用来实现这一点,因为如果不存在子项,它会将其添加到数据库中。
我怎样才能使用
数据库参考

编辑:谢谢所有的建议,但是我对下面的代码有问题。当它进入if块时,它不会将数据推送到数据库中

当我尝试使用旧的Firebase引用时,会得到错误代码11(从Firebase runloop调用的用户代码),而使用新的数据库引用时,会得到错误代码-3(PermissionDenied,即使我没有安全规则)

更新:

我使用单值事件侦听器实现了我想要的功能:

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) {

    }
});  

然而,数据库引用不允许我像这样添加值

您需要调用
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文档中的部分。

查看此示例,它可能会对您有所帮助

     public class FirebaseUserDetails
    {
    private String mDisplayName;
    public String getmDisplayName() {
        return mDisplayName;
    }
public void setmDisplayName(String mDisplayName) {
    this.mDisplayName = mDisplayName;
}
}
将您的价值添加到firebase数据库

FirebaseUserDetails firebaseUserDetails = new FirebaseUserDetails();
firebaseUserDetails.setmDisplayName("arunwin");
DatabaseReference pathReference = FirebaseDatabase.getInstance().getReference().child("contacts");
pathReference.child("arun").setValue(firebaseUserDetails).addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {

    }
});

如果未经授权,则无法向数据库中添加任何内容。您可以执行以下操作之一:

在firebase控制台中将其设置为规则选项卡:

{
"rules": {
".read": true,
".write": true
}
}
或者您必须先创建身份验证(尝试使用电子邮件/密码),然后使用创建用户

createUserWithEmailAndPassword(email, password)
然后使用以下内容登录:

signInWithEmailAndPassword(email, password)
您还需要在控制台中启用电子邮件/通行证登录


然后您可以将数据写入数据库。

另一篇文章提到了检查gradle应用程序文件以确保您拥有最新版本的Firebase,如下所示:

compile 'com.google.firebase:firebase-core:10.0.1'
compile 'com.google.firebase:firebase-database:10.0.1'
我认为这将解决使用旧版本时可能出现的许多问题


我希望这有帮助。

在firebase中设置值之前使用
push()
。每当您在数据库中发送值时,它都会创建新用户。

在我的例子中,我正在像这样添加新的子对象

注意:我在这里向我的
firebase数据库添加新的子
refresh\u令牌

FirebaseDatabase.getInstance().getReference().child("RegistrationModel").child(userId)
                    .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Map<String, String> stringStringHashMap =(Map<String, String>) dataSnapshot.getValue();

                    stringStringHashMap.put("refresh_token",refreshedToken);

                    FirebaseDatabase.getInstance().getReference().child("RegistrationModel").child(userId)
                            .setValue(stringStringHashMap);

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
FirebaseDatabase.getInstance().getReference().child(“注册模型”).child(用户ID)
.addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
Map StringHashMap=(Map)dataSnapshot.getValue();
stringhashmap.put(“刷新令牌”,refreshedToken);
FirebaseDatabase.getInstance().getReference().child(“注册模型”).child(用户ID)
.setValue(StringHashMap);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});

很抱歉,我可能误解了您的问题,但
mDatabase
a
DatabaseReference
getReference()
方法返回
DatabaseReference
感谢您的建议!但是,我有更多的问题,因为事务似乎没有更新数据库中的值(将编辑添加到问题中)。@Frank van Puffelen我如何才能在firebase数据库中添加嵌套子项?谢谢您的回答。但是,我没有设置身份验证规则,用户可以登录;这就是我在代码块中使用的用户对象。是否可以使用push()或尝试mDatabase.child(“childToAdd”).setValue(“1”);不,推也不行。我尝试了mDatabase.child(“childToAdd”).setValue(1);我尝试使用单值事件侦听器,但我可以读取该值,如果该值为null,则尝试添加一个子项,但也不起作用。
FirebaseDatabase.getInstance().getReference().child("RegistrationModel").child(userId)
                    .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Map<String, String> stringStringHashMap =(Map<String, String>) dataSnapshot.getValue();

                    stringStringHashMap.put("refresh_token",refreshedToken);

                    FirebaseDatabase.getInstance().getReference().child("RegistrationModel").child(userId)
                            .setValue(stringStringHashMap);

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });