Android 如何将一个节点的子节点复制到另一个节点Firebase&;安卓

Android 如何将一个节点的子节点复制到另一个节点Firebase&;安卓,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个包含公司类别的X DB,我想获得类别的子项并将副本发送给AllEmpresas 我的火力基地 我正在使用这段代码,但我不知道如何实现 private void copyRecord(DatabaseReference fromPath, final DatabaseReference toPath) { ValueEventListener valueEventListener = new ValueEventListener() { @Ove

我有一个包含公司类别的X DB,我想获得类别的子项并将副本发送给AllEmpresas

我的火力基地

我正在使用这段代码,但我不知道如何实现

private void copyRecord(DatabaseReference fromPath, final DatabaseReference toPath) {
        ValueEventListener valueEventListener = new ValueEventListener()  {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {   

               toPath.setValue(dataSnapshot.getValue()).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isComplete()) {
                            Log.d(TAG, "Success!");
                        } else {
                            Log.d(TAG, "Copy failed!");
                        }
                    }
                });
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {}
        };

        fromPath.addListenerForSingleValueEvent(valueEventListener);
    }
private void copyRecord(数据库引用fromPath,最终数据库引用toPath){
ValueEventListener ValueEventListener=新的ValueEventListener(){
@凌驾
public void onDataChange(DataSnapshot DataSnapshot){
setValue(dataSnapshot.getValue()).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.isComplete()){
Log.d(标记“Success!”);
}否则{
Log.d(标记“复制失败!”);
}
}
});
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){}
};
fromPath.addListenerForSingleValueEvent(valueEventListener);
}

一旦实现,您的代码将导致无限循环。这是它正常工作的正确方式

private void copyRecord(DatabaseReference fromPath, final DatabaseReference toPath) {
    fromPath.addListenerForSingleValueEvent(new ValueEventListener()  {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            toPath.setValue(dataSnapshot.getValue().toString()).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    Log.d(TAG, "Success!");
                }
            });
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });
}
private void copyRecord(数据库引用fromPath,最终数据库引用toPath){
fromPath.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
toPath.setValue(dataSnapshot.getValue().toString()).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
Log.d(标记“Success!”);
}
});
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){}
});
}

一旦实现,您的代码将导致无限循环。这是它正常工作的正确方式

private void copyRecord(DatabaseReference fromPath, final DatabaseReference toPath) {
    fromPath.addListenerForSingleValueEvent(new ValueEventListener()  {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            toPath.setValue(dataSnapshot.getValue().toString()).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    Log.d(TAG, "Success!");
                }
            });
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });
}
private void copyRecord(数据库引用fromPath,最终数据库引用toPath){
fromPath.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
toPath.setValue(dataSnapshot.getValue().toString()).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
Log.d(标记“Success!”);
}
});
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){}
});
}
更好的方法

我选择了使用,它的作品伟大

谢谢大家的支持

const functions = require('firebase-functions');

const admin = require('firebase-admin'); //Importar o Admin SDK para escrever dados na database
admin.initializeApp(functions.config().firebase);   

exports.copiarEmpresas = functions.database.ref('/Categorias/{categoria}/{empresa}')
    .onWrite((change, context) => {
        var snapshot = change.after;
        return admin.database().ref('AllEmpresas').child(snapshot.key).set(snapshot.val());
});
更好的方法

我选择了使用,它的作品伟大

谢谢大家的支持

const functions = require('firebase-functions');

const admin = require('firebase-admin'); //Importar o Admin SDK para escrever dados na database
admin.initializeApp(functions.config().firebase);   

exports.copiarEmpresas = functions.database.ref('/Categorias/{categoria}/{empresa}')
    .onWrite((change, context) => {
        var snapshot = change.after;
        return admin.database().ref('AllEmpresas').child(snapshot.key).set(snapshot.val());
});
可能的重复可能的重复