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

时间:2018-05-23 23:22:17

标签: android firebase firebase-realtime-database

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

我的火力棒 https://i.imgur.com/YDhHn6X.jpg

我使用此代码但我不知道如何实施

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

2 个答案:

答案 0 :(得分:0)

一旦实现,您的代码将导致一个无限循环。这是正确运行的正确方法。

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

答案 1 :(得分:0)

更好的方法

我选择使用Cloud Function,效果很好!

感谢大家的支持。

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