【问题标题】:Android Firebase: how to change objects with specific field value?Android Firebase:如何更改具有特定字段值的对象?
【发布时间】:2017-07-24 10:43:31
【问题描述】:

Firebase 数据库节点“memories/”包含 Memory{String name; 类型的对象国际成本; ...} 我需要获取具有特定“名称”字段(例如“派对”)的对象并删除它们或在其他情况下更改“成本”字段值。 这个我试过了……

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

错误

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

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

【问题讨论】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2015-09-03
      • 1970-01-01
      • 2010-11-08
      • 2012-07-13
      相关资源
      最近更新 更多