Как скопировать дочерний узел на другой узел Firebase & Android - PullRequest
0 голосов
/ 24 мая 2018

У меня есть 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 голосов
/ 24 мая 2018

Лучший подход

Я решил использовать Облачная функция , и она прекрасно работает!

Спасибо, ребята, за поддержку.

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());
});
0 голосов
/ 24 мая 2018

После реализации Ваш код вызовет цикл, который будет бесконечным.Это правильный способ для правильной работы.

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) {}
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...