我尝试使用DatabaseReference
Android应用中的Firebase
添加新的孩子。我正在做:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference()
mDatabase.child("childToAdd").setValue(1);
我可以使用常规Firebase
引用来执行此操作,因为它会将子项添加到数据库中(如果不存在)。
我怎么能用DatabaseReference
来做这件事?
编辑:感谢您提出的所有建议,但我遇到以下问题的问题。当它进入if块时,它不会将数据推送到数据库。
https://gist.github.com/rounaksalim95/a5cba332400c6caf8320f15b0cbf06e8
当我使用旧的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) {
}
});
但是数据库引用不允许我添加这样的值。
答案 0 :(得分:22)
您需要致电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文档中的append to a list of data部分。
答案 1 :(得分:2)
提到的另一篇文章是检查您的gradle app文件,以确保您拥有最新版本的Firebase,如下所示:
compile 'com.google.firebase:firebase-core:10.0.1'
compile 'com.google.firebase:firebase-database:10.0.1'
我认为这应该解决使用旧版本可能产生的许多问题。
我希望这会有所帮助。
答案 2 :(得分:1)
如果您未获得授权,则无法向数据库添加任何内容。您可以执行以下操作之一:
将其设置为firebase控制台中的规则选项卡:
{
"rules": {
".read": true,
".write": true
}
}
或者您必须先创建身份验证(尝试使用电子邮件/传递)并使用
创建用户createUserWithEmailAndPassword(email, password)
然后使用以下地址登录:
signInWithEmailAndPassword(email, password)
您还需要在控制台中启用使用电子邮件/通行证登录。
然后您可以将数据写入数据库。
答案 3 :(得分:1)
在firebase中设置值之前使用push()
。每次在数据库中发送值时,它都会创建新用户。
答案 4 :(得分:0)
检查此示例,它可能会帮助您。
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) {
}
});
您的结果值将添加到您的数据库中,如下所示
contacts:
arun:
mDisplayName:"arunwin"
答案 5 :(得分:0)
在我的情况下,我正在添加这样的新孩子!
注意:我在这里向我的refresh_token
firebase database
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) {
}
});
答案 6 :(得分:-1)
在下面的代码中,我将一个名为deepak的子项添加到我的数据库中,然后再添加一个包含名称列表的子项。通过你的代码,我猜你已经知道如何在数据库中添加子项,你只是有点困惑。
private DatabaseReference childRef;
private DatabaseReference listRef;
databaseReference = FirebaseDatabase.getInstance().getReference();
childRef = databaseReference.child("deepak");
listRef = childRef.child("list");
listRef.setValue(callList);