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

问题描述 投票:0回答:2

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

我已附上相同的图像。 IMAGE

android node.js firebase firebase-realtime-database
2个回答
2
投票

要解决此问题,我建议您使用以下代码行:

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) {
                        Log.d(TAG, "Copy failed!");
                    } else {
                        Log.d(TAG, "Success!");
                    }
                }
            });
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            Log.d("TAG", firebaseError.getMessage()); //Never ignore potential errors!
        }
    });
}

这是复制,而不是您可能看到的移动操作,因此原始记录将保留在其原始位置。如果要删除,可以在

removeValue()
之后的
from path
上使用
System.out.println("Success");
方法。

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

这是使用新 API 的代码。

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) {
            Log.d("TAG", databaseError.getMessage()); //Never ignore potential errors!
        }
    };
    fromPath.addListenerForSingleValueEvent(valueEventListener);
}

0
投票

我有同样的问题,但是在 kotlin 中,所以请帮助我

© www.soinside.com 2019 - 2024. All rights reserved.