Java 在Firebase中切换child中的child

Java 在Firebase中切换child中的child,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,为了帮助您理解,我根据数据库引用的子级提供了一个带有简单键名和值的图像 我想切换两个childs的值+键 例如,子0具有新的子“keyOne”,其中键为“keyOne”,值为“valueOne”。。。Etc与1、2和3号孩子一起 - 我将如何切换“0”和“1”的孩子 换孩子,我的意思是,我想最终得到一个孩子 - 希望你们能理解我的意思。如果你现在还没有,我就给你最后一次机会 我希望将一个子项的键+值组合切换为另一个子项的键+值组合 谢谢 假设currentMembers节点是Firebase根目

为了帮助您理解,我根据数据库引用的子级提供了一个带有简单键名和值的图像

我想切换两个childs的值+键

例如,子0具有新的子“keyOne”,其中键为“keyOne”,值为“valueOne”。。。Etc与1、2和3号孩子一起

- 我将如何切换“0”和“1”的孩子

换孩子,我的意思是,我想最终得到一个孩子

- 希望你们能理解我的意思。如果你现在还没有,我就给你最后一次机会

我希望将一个子项的键+值组合切换为另一个子项的键+值组合


谢谢

假设
currentMembers
节点是Firebase根目录的直接子节点,并且您的数据库如下所示:

要实现您的目标,请输入以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference currentMembersRef = rootRef.child("currentMembers");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String valueZero =  dataSnapshot.child("0").child("keyZero").getValue(String.class);
        String valueOne =  dataSnapshot.child("1").child("keyOne").getValue(String.class);

        dataSnapshot.child("0").child("keyZero").getRef().setValue(valueOne);
        dataSnapshot.child("1").child("keyOne").getRef().setValue(valueZero);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
currentMembersRef.addListenerForSingleValueEvent(valueEventListener);
结果将是:


我有!这个解决方案的唯一问题(感谢您的回复)是价值是唯一会改变的东西。我一直在寻找键和值(如keyZero+valueZero)作为一对进行更改。可以将其视为一个用户名和一个全名,在列表的列组(“currentMembers”)之间切换。我的目标是在childs中同时切换用户名和全名(如果有意义的话)。再看看我的问题好吗?谢谢你@Alex Mamotore无法在Firebase中更改密钥的名称。没有用于执行此操作的API。如果需要更改密钥的名称,则需要复制该子级,更改名称并删除旧的名称。一个解决方案是创建一个排名系统,然后根据它查询数据。即使可以重命名密钥,也不会对您有任何帮助。数据库中的顺序与输出中的顺序不同。您认为我的回答对您有帮助吗?
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference currentMembersRef = rootRef.child("currentMembers");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String valueZero =  dataSnapshot.child("0").child("keyZero").getValue(String.class);
        String valueOne =  dataSnapshot.child("1").child("keyOne").getValue(String.class);

        dataSnapshot.child("0").child("keyZero").getRef().setValue(valueOne);
        dataSnapshot.child("1").child("keyOne").getRef().setValue(valueZero);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
currentMembersRef.addListenerForSingleValueEvent(valueEventListener);