如何在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
aDatabaseReference
?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) {
}
});