Android Firebase: How To Change Objects With Specific Field Value?
Firebase database node 'memories/' contains objects of type Memory{String name; int cost; ...} I need to get objects with specific 'name' field (for example  'party') and delete th
Solution 1:
You could use a query:
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();
            }
        }
    });
Note: Do remember to set indexOn rule on "name" for Memory
Your rule should looks like this:
{
  "rules": {
    ...
    "memories": {
      ".indexOn": "name"
    }
  }
}
Solution 2:
There could be more ideal approaches, but this is what works for me:
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: I'm just adding it to an array here... You could change it as you require
Post a Comment for "Android Firebase: How To Change Objects With Specific Field Value?"