让我们考虑一个带有“电子邮件”属性的“UserBean”ArrayList<EmailBean>
。
保存在 Firebase 时,它就像:
"users" : {
"$userID" : {
"emails" : [
"0" : {
"type" : "first",
"address" : "google@google.com",
"private" : true
},
"1" : {
"type" : "second",
"address" : "firebase@firebase.com",
"private" : false"
}
],
"name" : "Mitch"
}
}
所以有可能实现这样的目标:
"users" : {
"$userID" : {
"emails" : [
"first" : {
"address" : "google@google.com",
"private" : true
},
"second" : {
"address" : "firebase@firebase.com",
"private" : false
}
],
"name" : "Mitch"
}
}
我宁愿不必一次保存一个地址。
也许有一个注释要告诉 Firebase 将此属性用作键?
问候。
答案 0 :(得分:1)
我建议您使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference emailsRef = rootRef.child("users").child(userId).child("emails");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String type = ds.child("type").getValue(String.class);
ds.child("type").getRef().getParent().setValue(type);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
emailsRef.addListenerForSingleValueEvent(eventListener);
我尝试使用此代码了什么?因此,为了达到您想要的效果,首先我们获得了您的type
密钥的价值。然后我们在树中进行一步,并为每个特定节点设置具有type
键值的partent。
使用type的值而不是0, 1 and so on
来完成工作,只需直接在引用上使用type key
方法从每个节点中删除removeValue()
。