【问题标题】:Android Firebase: how to change objects with specific field value?Android Firebase:如何更改具有特定字段值的对象?
【发布时间】:2017-07-24 10:43:31
【问题描述】:
【问题讨论】:
标签:
android
firebase
firebase-realtime-database
【解决方案1】:
您可以使用查询:
Query query = memoryRef.orderByChild("name").equalTo("party");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot){
for (DataSnapshot child : dataSnapshot.getChildren()) {
//to update:
memoryRef.child(child.getKey()).child("cost").setValue(100);
//delete
memoryRef.child(child.getKey()).removeValue();
}
}
});
注意:记得在内存的“名称”上设置 indexOn 规则
您的规则应如下所示:
{
"rules": {
...
"memories": {
".indexOn": "name"
}
}
}
【解决方案2】:
可能有更理想的方法,但这对我有用:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("memories");
ValueEventListener memListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
memoryList = new ArrayList<>();
Memory memory;
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
int cost = (int) userSnapshot.child("cost").getValue();
String name = (String) userSnapshot.child("name").getValue();
//Get other fields here
if (name.matches("party")) {
memory = new Memory(name , cost);
memoryList.add(memory);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mDatabase.addValueEventListener(memListener);
PS:我只是在这里将它添加到数组中...您可以根据需要更改它