Android Firebase:如何更改具有特定字段值的对象?

时间:2017-07-20 01:00:57

标签: android firebase firebase-realtime-database

Firebase数据库节点"内存/"包含Memory {String name;类型的对象成本; ...}我需要获得具有特定"名称"的对象。字段(例如" party")并删除它们或更改" cost"其他情况下的字段值。 我试过这个......

memoryRef.orderByChild("party").equalTo(true).setValue(null);

错误

我已经读过这个...... https://firebase.google.com/docs/reference/js/firebase.database.Query

那里只有动作处理程序...请帮忙,我感觉它应该很简单......

2 个答案:

答案 0 :(得分:2)

您可以使用查询:

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();
            }
        }
    });

注意:请记住在" name"上设置indexOn规则。记忆

您的规则应如下所示:

{
  "rules": {
    ...
    "memories": {
      ".indexOn": "name"
    }
  }
}

答案 1 :(得分:0)

可能有更理想的方法,但这对我有用:

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:我只是将它添加到数组中......您可以根据需要更改它