我正在尝试将我的数据在一个节点上移动,即cart_details / UID移动到另一个节点order / UID / order1。 我尝试了不同的方法,但似乎都有点令人困惑。是否有任何内置功能或方法可以使工作更轻松? 任何帮助表示赞赏。
我已附上相同的图像。 IMAGE
答案 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);
}