在firebase数据库中将数据从一个节点移动或复制到另一个节点

时间:2017-06-28 18:16:05

标签: android node.js firebase firebase-realtime-database

我正在尝试将我的数据在一个节点上移动,即cart_details / UID移动到另一个节点order / UID / order1。 我尝试了不同的方法,但似乎都有点令人困惑。是否有任何内置功能或方法可以使工作更轻松? 任何帮助表示赞赏。

我已附上相同的图像。 IMAGE

1 个答案:

答案 0 :(得分:1)

我重新命令你使用这个方法:

public void copyRecord(Firebase fromPath, final Firebase toPath) {
    fromPath.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            toPath.setValue(dataSnapshot.getValue(), new Firebase.CompletionListener() {
                @Override
                public void onComplete(FirebaseError firebaseError, Firebase firebase) {
                    if (firebaseError != null) {
                        System.out.println("Copy failed");
                    } else {
                        System.out.println("Success");
                    }
                }
            });
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {}
    });
}

这是副本,而不是您可能看到的动作,因此原件将保留在原来的位置。如果您要删除,可以在removeValue()后面的fromPath上使用System.out.println("Success");方法。

编辑:(2018年5月3日)。

以下是使用新Api的代码。

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