从Firebase删除共享同一子项的多个数据-Java-orderByKey

时间:2018-09-16 21:41:42

标签: java android firebase firebase-realtime-database

我有以下Firebase数据库:

Database picture

我需要删除所有共享相同“ date_cours”类型的条目/数据库对象。

我尝试了以下方法删除所有具有相同date_cours“ 10/09/2018”的条目,例如:

private void Delete_CR_Lessons(Date date) {
    final String date_a_supprimer_string = DateFormat.getDateInstance(DateFormat.SHORT).format(date);

    DatabaseReference drTest = FirebaseDatabase.getInstance().getReference("cours");

    drTest.child("date_cours").orderByKey().equalTo("10/09/2018")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Log.i("Tag", "test1");

                    for (DataSnapshot postsnapshot :dataSnapshot.getChildren()) {
                        Log.i("Tag", "test2");
                        String key = postsnapshot.getKey();
                        dataSnapshot.getRef().removeValue();
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.w("TAG: ", databaseError.getMessage());
                }
            });
}//fin de la methode Delete_CR_Lessons

我在执行该方法期间没有任何错误。 在日志中,我可以看到日志“ test1”,但看不到日志“ test2”。

有人知道我想念什么吗?

1 个答案:

答案 0 :(得分:1)

您提供了错误的路径,然后尝试删除错误的datasnapshot值,例如,尝试使用:postsnapshot.getRef().removeValue();而不是dataSnapshot.getRef().removeValue();,因为dataSnapshot没有指向到要删除的值。这就是为什么您使用for循环从数据库中获取所有值节点的原因。检查下面的代码:

DatabaseReference drTest = FirebaseDatabase.getInstance().getReference("cours");

drTest.orderByChild("date_cours").equalTo("01/10/2018")
        .addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                Log.i("Tag", "test1");

                for (DataSnapshot postsnapshot :dataSnapshot.getChildren())  {
                    Log.i("Tag", "test2");
                    String key = postsnapshot.getKey();
                    postsnapshot.getRef().removeValue();
                }

            }


            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.w("TAG: ", databaseError.getMessage());
            }

        });