使用相同的密钥删除不同的数据时,是否删除了Firebase数据?

时间:2017-02-08 11:45:59

标签: firebase firebase-realtime-database

当我删除Firebase中的第一个节点“列表”时,会自动删除第二个节点“列表2”。我认为这是由于两个节点的子节点的相同键而发生的。有没有办法阻止另一个节点被删除? My Firebase Database

这是我用来将数据从“List”复制到“List 2”然后删除节点“List”的代码。当我删除一个节点时,另一个节点也会被删除。

ref.child("List").child(cardTitle).addValueEventListener(new ValueEventListener() {
                                                                @Override
                                                                public void onDataChange(DataSnapshot dataSnapshot) {


                                                                    ref.child("SHOP_ITEM").child("List 2).setValue(dataSnapshot.getValue());
                                                                    ref.child("SHOP_ITEM").child("List").removeValue();

                                                                }

                                                                @Override
                                                                public void onCancelled(DatabaseError databaseError) {

                                                                }
                                                            });

1 个答案:

答案 0 :(得分:0)

我有同样的问题,所以我用了一个工作;我只是添加了一个取消值。类似于cancel:"true"

根据您的情况DATABASEREF1 = List1DATABASEREF2 = List2 ..

这对我有用。这是代码:

DATABASEREF1.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        HashMap<String,String> hMdataSnapshot = (HashMap<String, String>) dataSnapshot.getValue();
        hMdataSnapshot.put("canceled","true");

        DATABASEREF2.setValue(hMdataSnapshot).addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {

                DATABASEREF1.removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            //DO SOMETHING
                        } else {
                           //DO SOMETHING 
                        }
                    }
                });

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
               //DO SOMETHING
            }
        });

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
    }
});