【发布时间】:2017-12-02 06:01:50
【问题描述】:
我正在尝试将存在于一个节点上的数据(即 cart_details/UID)移动到另一个节点 orders/UID/order1。 我尝试了不同的方法,但似乎都有些混乱。是否有任何内置功能或方法可以使工作更轻松? 任何帮助表示赞赏。
我已经附上了相同的图片。 IMAGE.
【问题讨论】:
标签: android node.js firebase firebase-realtime-database
我正在尝试将存在于一个节点上的数据(即 cart_details/UID)移动到另一个节点 orders/UID/order1。 我尝试了不同的方法,但似乎都有些混乱。是否有任何内置功能或方法可以使工作更轻松? 任何帮助表示赞赏。
我已经附上了相同的图片。 IMAGE.
【问题讨论】:
标签: android node.js firebase firebase-realtime-database
我建议您使用此方法:
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) {}
});
}
这是一个副本,而不是您可能看到的移动,因此原件将保留在其原来的位置。如果你想删除,你可以在fromPath的System.out.println("Success");之后使用removeValue()方法。
编辑:(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);
}
【讨论】: