我不知道标题是否有意义,所以我会在这里详细说明我的问题。
{
"rsvp":[
{"event": "event1","name": "name1","rsvp": "going"},
{"event": "event2","name": "name2","rsvp": "going"}
]
}
我想以上面提到的格式存储数据,如果该项目来自同一个用户,它应该覆盖,但我现在得到的是
{ "rsvp": {"event": "event_here","name": "name_here","rsvp": "going"}}
每次更新值时都会与用户无关。
这是我的代码实现
final Firebase firebase = new Firebase(Constant.FIREBASE_URL).child("rsvp");
final HashMap<String, String> map1 = new HashMap<>();
map1.put("rsvp", "going");
map1.put("name", mUserName);
map1.put("event", title);
firebase.setValue(map1);
请让我知道我做错了什么。谢谢。
更新1
我知道push()
,但在检索数据时,提取push()
给出unique tag
的元素会有问题。此外,push()
创建每个调用的实例,因此假设一个用户执行所有三个操作,它将有三个实例而不是一个。
我的解决方案
假设firebase不支持我在这里寻找的东西..
我们已知道UID
以及我计划添加rsvp的event
。
所以我计划用以下方式制作数据结构,
{"rsvp":{"uid1":{"event1":{"status":"going","email":"someemail@email.com"},"event2":
{"status":"maybe","email":"someemail@email.com"}},
"uid1":{"event1":{"status":"going","email":"someemail@email.com"},"event2":
{"status":"maybe","email":"someemail@email.com"}}}}
但是这个解决方案再次受到限制,我将无法从另一个用户的数据中获取其他用户的数据。我需要知道所有成员参加活动的地方。
答案 0 :(得分:3)
Firebase在处理数组方面有不寻常之处。这是因为阵列本身很难在分布式多用户系统(如Firebase)中进行扩展。如果您想了解更多信息,请阅读Firebase documentation on arrays and lists。
的此部分我建议不要将数据存储在数组(包含数字,顺序键)中,而是将其存储在Firebase列表中。 Firebase列表使用字母数字键。它们仍然总是递增,所以就像数组索引一样,它们非常适合存储顺序数据。
final Firebase firebase = new Firebase(Constant.FIREBASE_URL).child("rsvp");
final HashMap<String, String> map1 = new HashMap<>();
map1.put("rsvp", "going");
map1.put("name", mUserName);
map1.put("event", title);
firebase.push().setValue(map1);
这里唯一的区别是最后一行使用push()
来生成一个新孩子。密钥将是一个字符串(当前以-K
开头),称为推送ID。如果您想了解有关这些内容的更多信息,请阅读push ids - the 2^120 ways to ensure unique identifiers上的此博文。
如果您继续使用push().setValue(...)
将您的活动添加到列表中,它们将按您添加的顺序显示。就像数组索引一样,但现在有一种方法,当许多用户同时添加事件时也会有效。
读取 event1
的所有回复:
Query query = firebase.orderByChild("event").equalTo("event1");
query.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot rsvpSnapshot) {
for (DataSnapshot snapshot: rsvpSnapshot.getChildren()) {
String name = snapshot.child("name").getValue(String.class);
String rsvp = snapshot.child("rsvp").getValue(String.class);
System.out.println(name+": "+rsvp);
}
}
});
答案 1 :(得分:0)
{&#34; rsvp&#34;:{&#34; id&#34; =&#34; id&#34;,&#34; event&#34;:&#34; event_here&#34;, &#34; name&#34;:&#34; name_here&#34;,&#34; rsvp&#34;:&#34; go&#34;}} 更改您的json只需检查id,如果id是store,则更新特定id的数据,否则存储所有数据
答案 2 :(得分:0)
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef;
myRef=database.getReference().push().child("Email");
myRef.setValue(nameValue);
String key=myRef.getParent().getKey();
myRef=database.getReference(key).child("Password");
myRef.setValue(passwordValue);