如何访问父节点的子节点而不影响同一节点中的其他子节点?

时间:2018-10-03 07:41:08

标签: java firebase android-studio firebase-realtime-database

我已经访问了此Users节点的子节点。但是,每次我尝试更新一个孩子的得分和分析时,其他孩子都会受到影响,导致另一个孩子具有相同的价值。

This is the firebase console

这是我用来访问“用户”下分数的子代的代码

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    Query query = rootRef.child("Users").orderByChild("username");

    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {        
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    Map<String, Object> map = (Map<String, Object>) ds.getValue();
                    map.put("score", total);
                    ds.getRef().updateChildren(map);

            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d("TAG", databaseError.getMessage());
        }
    };
    query.addListenerForSingleValueEvent(valueEventListener);

这是我用来访问“用户”下的孩子进行分析的代码

 DatabaseReference dr = FirebaseDatabase.getInstance().getReference();
        Query q = dr.child("Users").orderByChild("username");

        ValueEventListener vel = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    Map<String, Object> map = (Map<String, Object>) ds.getValue();
                    map.put("analysis", sev);
                    ds.getRef().updateChildren(map);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d("TAG", databaseError.getMessage());
            }
        };
        q.addListenerForSingleValueEvent(vel);
    }

我必须在不影响其他孩子的情况下更新分析和得分

1 个答案:

答案 0 :(得分:1)

使用equalTo(theusername)指定您要获取访问权限更新的用户:

因此查询将是:

Query query = rootRef.child("Users").orderByChild("username").equalTo(theusername).child("score");

//或analysis代替score

在您的听众中:

ValueEventListener vel = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot ds : dataSnapshot.getChildren()) {

                   // update the value here ...
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d("TAG", databaseError.getMessage());
            }
        };
        q.addListenerForSingleValueEvent(vel);