我是firebase的新手。我试图以给定的格式在Firebase数据库中存储一些数据:
approot{
uid{
name:"name"
add:"add"
phn:"phn"
}
uid2{
name:"name"
add:"add"
phn:"phn"
}
.......
等等。 为此我写了以下代码:
String phn = inputPhn.getText().toString().trim();
String add = inputAdd.getText().toString().trim();
String name = inputName.getText().toString().trim();
if (TextUtils.isEmpty(name)) {
Toast.makeText(getApplicationContext(), "Enter name!", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(phn)||phn.length()!=10) {
Toast.makeText(getApplicationContext(), "Enter phone no.!", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(add)) {
Toast.makeText(getApplicationContext(), "Enter address!", Toast.LENGTH_SHORT).show();
return;
}
//String info="Name:"+name+"\n"+"PhoneNo:"+phn+"\n"+"Adress:"+add+"\n";
String uId=auth.getCurrentUser().getUid();
myref.child(uId).child("name").setValue(name);
myref.child(uId).child("add").setValue(add);
myref.child(uId).child("phone").setValue(phn);
myref.child(uId).child("end").setValue("end");
auth.signOut();
我的问题是我在firebase数据库中获得了一致的数据存储。存储在数据库中的数据是:
{
"User" : {
"ANj8GLEJS9alW11QYQyF8Rykwyn2" : {
"add" : "hzjs",
"name" : "hxjx"
},
"b0ZBftQ5UOOtTtzkeZHcC0558MC3" : {
"add" : "gw",
"name" : "hs"
},
"eH6rCXzvEncTe163N7KaJ7XEZp52" : {
"name" : "dudj"
},
"gEqc92Z0mvcfIWvhZu7QOhRcnNQ2" : {
"add" : "bsus",
"name" : "jziz",
"phone" : "1234567890"
},
"kGF2PalHrpeFus6682z55p47YBg2" : {
"add" : "hdud",
"name" : "jdhd"
},
"nHRt5n5roGfU3QogVUM09HDBrIw2" : {
"add" : "qwerty",
"end" : "end",
"name" : "q",
"phone" : "1234567860"
},
"pRRzexjQN1eynoCQcoClNl2TcHk2" : {
"add" : "dvjh",
"name" : "rhid"
},
"vaek3Z4eEVTWmc722T92tfgBwaE3" : {
"add" : "dhudvj",
"name" : "gsbud"
},
"xsH5JoTXftaxicUmvntt0N5hcNJ3" : {
"add" : "zhs",
"name" : "q"
}
}
}
请帮帮我。
修改的
我正在使用firebase 9.2.1。
并且定义的规则是: -
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
答案 0 :(得分:2)
在您注销用户之前,您应该等待setValue
完成,因为在signOut
成功调用后,auth将为null。如果setValue
尚未完成,则会违反您的规则,因为auth
已为空。
您可以使用CompletionListener
确保setValue
已完成,然后您可以安全地退出该用户。喜欢这个
Map<String, String> values = new HashMap<>();
values.put("name", name);
values.put("add", add);
values.put("phone", phn);
values.put("end", end);
DatabaseReference.CompletionListener completionListener = new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
auth.signOut();
}
};
myref.child(uid).setValue(values, completionListener);