我正在尝试将一个节点上的数据(即 cart_details/UID)移动到另一个节点orders/UID/order1。 我尝试了不同的方法,但似乎都有点令人困惑。是否有任何内置功能或方法可以使工作变得更容易? 任何帮助表示赞赏。
要解决此问题,我建议您使用以下代码行:
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);
}
我有同样的问题,但是在 kotlin 中,所以请帮助我